RSSAmplifier

Blog

binford2k.com

binford2k.comRSS feed ↗20 posts

Latest posts

Cranky community members

You know the kind. There’s that one person who always has all the opinions. Sometimes there are many of them. But they’re critical about that thing you built, or the workflow you designed, or that issue that you haven’t responded to since they filed it last year. Especially if you hear it long enough, this criticism can cut deeply. Technical Open Source community members always have something to…

Recovering archived Puppet blog posts

The Puppet blog has long been a treasure trove of content. You never knew what you might find; a product announcement, an industry analysis, a user interview, a technical post. And it never deleted content, so people got into the habit of linking to blog posts to use as reference or documentation. This was really great in a lot of ways, but it came with its downsides. Outdated content didn’t…

Puppet Containment Demystified

Containment has always been kind of a sticky subject in the Puppet world. Part of the confusion is that that Puppet tries really hard to handle on its own so that you don’t have to care about the weird little implementation details of how ordering relationships are resolved. But that just means you’re not expecting it when it does raise its nasty little hobbit head. Let’s talk a bit about how…

Cleaning up unused modules with Dropsonde

You’ve probably been using Puppet Forge modules to manage bits in your infrastructure for years. And if you’re like most of us, you’ve gradually added more modules and maybe sort of lost track of exactly what some of them do and on what nodes they’re declared on. You may even suspect that you have modules installed that you haven’t actually used in years…. only you’re not quite certain which…

Winter Solstice run 2021

Today at 7:58 am was the Winter Solstice. That’s when the days stop getting shorter and start getting longer again. Metaphorically, it’s when darkness starts leaving our lives again and we welcome in more light. Ruben and I celebrated with a 7:58 am morning run, of course. The first half of the run was on a well-worn regular route, but then on the way back we wandered on an unplanned, unmapped,…

Correcting misinformation with Twitter Birdwatch

Information is power. And those who control the narrative have all the power in the world. In recent years, we’ve seen the interconnectedness of our digital communities lead to the weaponization of misinformation. The obvious example of that was the Jan 6, 2021 insurrection in which a departing president incited an attempted coup in a pathetic attempt to remain in power and relevant. He did this…

How to use a module from the Puppet Forge

The Puppet Forge is a great place to find content. Whether you’re looking for a module to manage SELinux contexts , or Windows registry settings , or even major applications like IBM WebSphere , you’re almost certain to find it on the Forge. Using that content is a different story though. It’s generally left as an exercise to the reader to know which installation method is appropriate and how to…

Slicing and dicing Forge usage data

The Forge content ecosystem is large and complex. There are a lot of modules, and modules that use resources from other modules. It can be hard to navigate these relationships when you’re deciding how to invest development resources. For example, it’s useful to know how many modules call a function when deciding whether we should deprecate it. To assist in making these decisions, the Ecosystem…

Porting a module to RHEL 8

Often, updating a Puppet module to work on a newer platform is mostly a case of fixing up a a few paths or package names. Sometimes though, more significant changes are called for. When updating to RHEL (or family) 8, here are some major changes that we’ve had to account for: dnf is the new standard package manager. Some services only log to systemd now and not to /var/log/* X.org has finally been…

Reporting a problem with a module

Have you found a problem with a module? Maybe it doesn’t behave properly when you enable SELinux, or maybe it just doesn’t declare support for the latest Puppet release. In any case, let’s walk through how you can surface the problem and maybe get it corrected. First find the module on the Forge. You’ll probably see a “Report issues” link. Clicking that link will take you to the issue tracker for…

Contributing a pull request

Coming soon; instructions on completing a pull request.

Validating a module on a newer Puppet version

Puppet modules declare their own Puppet version support. In other words, the module developer will use the metadata.json file to indicate the Puppet versions they have tested against. Most notably, that means that a module not declaring support for the latest version of Puppet does not necessarily mean that it does not support that version, it might just mean that the developer hasn’t validated it…

Gathering metrics with a new Dropsonde plugin

I’ve been working on the Dropsonde telemetry framework for the Puppet ecosystem for a while. If you’ve followed any of its development, you likely already know that the main focus is on providing community value and maintaining privacy and transparency. Along those lines, the data it generates is public and you’re invited to help implement the metrics, or even to use the framework to gather your…

Telemetry that doesn't suck

We both know that you hate telemetry as much as I do. We’ve all seen the dreadful rollouts of privacy invasions, the information leakage, and the abuse of private data. I have third-party cookies disabled in my browser the same as you. So when I started building Dropsonde , the upcoming metrics framework for Puppet infrastructures, privacy was my highest concern. As a matter of fact, I have a firm…

Downstream impact of pull requests

Accepting a pull request carries a certain amount of risk, especially if you have a lot of downstream users of your code. It’s not easy to know the potential impact of breakage that a PR might introduce to your carefully tested codebase. A couple weeks ago I wrote about a tool that can show a pretty complete analysis of who’s using the different part of your Puppet modules. It can show which parts…

Writing a great README

Surprisingly enough, it’s not really that hard to write a good README. The key is to remember who you’re writing for and why. See, it’s all about time and resource management—specifically, the time that a reader is willing to give you. This is often overlooked because most people write READMEs to be informative, but they don’t take into account how much context is implied. Most people reading…

Impact Analysis of Puppet Modules

Have you ever wondered who’s using your Puppet modules? Or have you hesitated before changing a class parameter because you don’t really know how many people will be affected downstream? Maybe you hesitated before deprecating a barely supported and almost certainly unused subclass because… well, you didn’t really know for sure that it was unused. Rangefinder is the tool for you. Just run it on the…

Porting the whole world to a new API

If you maintain Puppet modules, you might have come across a little gift from me as you got back to coding after the holiday season. It’d be in your GitHub inbox. Not long ago , I put together a tool to help port Puppet Ruby functions from the legacy 3.x API to the modern API. Over the New Year, I ran it through the ringer and updated it to catch a few more edge cases. Then once I was sure that it…

Automagic Puppet Function Updater

Last week I wrote about porting legacy Ruby Puppet functions to the modern API. It struck me how programatic the refactoring process was, so I wrote a tool to automate much of it. The functions it generates are not great but they’re a start, and they’re validated to at least work during the process. Installing The tool is distributed as a Ruby gem with no dependencies, so simply gem install . $…

Upgrade to Puppet 4.x functions already!

For many years, you’ve been able to extend the Puppet language by writing custom functions in Ruby. And since the functions were autoloaded from modules, a large ecosystem developed adding all sorts of functionality. For example, puppetlabs/stdlib includes a smorgasbord of string manipulations, data validations, data structure munging, etc. But the original function API had many critical…