Skip to content

Field notes

Written from the console.

Practical notes on the tools we use and the things we were told they couldn't do.

Series

Peering

3 parts

Azure Virtual Network Manager exists. Here is why a few hundred lines of Python beat it for a legacy estate, and what that cost.

  1. 01 There Is A Product For This, And We Didn't Use It
  2. 02 The Schema That Made It Generatable
  3. 03 Overrides, Exclusions, and Importing a Legacy Estate
the code on GitHub →

Pymantic Release

3 parts

How a 300-line Python script replaced our entire release process, and the four separate ways it was quietly wrong.

  1. 01 One Repo, Sixty Modules, and the Lie of a Single Version Number
  2. 02 module_versions.json, or How We Stopped Find-And-Replacing Production
  3. 03 Wrapping It All in Terragrunt
the code on GitHub →

All notes

· 15 min read

The Cloud Has No Undo Button

Azure will back up your VMs, your disks and your databases. It will not back up the network they run on. So I put the whole platform in git — one file per resource, one commit a day.

AzureBackupPython
· 14 min read

Peering, Part 3: Overrides, Exclusions, and Importing a Legacy Estate

Generating uniform infrastructure is easy. Generating infrastructure that matches what is already deployed is the job.

TerraformAzureMigration
· 16 min read

Peering, Part 2: The Schema That Made It Generatable

A symmetric object, a boolean called module_output, and a module that deliberately creates nothing.

TerraformAzureModule Design
· 14 min read

Peering, Part 1: There Is A Product For This, And We Didn't Use It

Azure Virtual Network Manager exists. Here is why a few hundred lines of Python beat it for a legacy estate, and what that cost.

AzureNetworkingTerraform
· 7 min read

Pymantic Release, Part 3: Wrapping It All in Terragrunt

A generated file that depends on a human remembering to generate it is not a solved problem. Hooks are.

TerragruntTerraformCI/CD
· 11 min read

Pymantic Release, Part 2: module_versions.json, or How We Stopped Find-And-Replacing Production

Fifty-seven independently versioned modules met twenty subscription directories. Someone had to blink.

TerraformIaCPython
· 14 min read

Pymantic Release, Part 1: One Repo, Sixty Modules, and the Lie of a Single Version Number

How a 300-line Python script replaced our entire release process, and the four separate ways it was quietly wrong.

TerraformRelease EngineeringPython
· 1 min read

Choosing the Right Monitoring Solution for Your Infrastructure

A comparison of popular monitoring tools and how to pick the right one for your needs.

MonitoringCheckMKInfrastructure
· 1 min read

Terraform Best Practices for Production Infrastructure

Essential patterns and practices for managing production infrastructure with Terraform.

TerraformIaCCloud
· 1 min read

Getting Started with Ansible for Infrastructure Automation

A beginner's guide to using Ansible for configuration management and infrastructure automation.

AnsibleAutomationDevOps

Next step

Reading is free. Fixing it is our job.

A short conversation is enough to know whether we can help. No sales deck, no discovery workshop, just an engineer on the other end.