Self-validating Terraform imports: detecting regressions at plan time
How can a Terraform configuration prove — at plan time, before any apply — that importing an existing live resource does not change its behavior?
Recent content on Mike Ball
How can a Terraform configuration prove — at plan time, before any apply — that importing an existing live resource does not change its behavior?
An overview of techniques for testing Terraform, from linting to end-to-end testing.
Using Node.js's built-in test runner and assertion library to avoid third-party test dependencies.
Reading release assets in Terraform via the `github_release_asset` data source.
Cats forever wallpaper prints, made to order in the dimensions of your choosing. Reach out for pricing and details.
How can a Terraform configuration test whether it has sufficient access to do its own work?
Conditionally configure AWS EC2 launch block device mappings in a Packer template.
An overview of the Terraform wrapper module pattern.
An overview of native Terraform constructs enabling reuse and repeatability.
My overview of the Terraform compound workspace name pattern.
How can terratest be used to automate Terraform plan analysis?
How can a function wrapping the aws-sdk-go be unit tested using a local directory serving as a mock AWS S3 bucket?
A demo illustrating the use of `tfmigrate` for automating complex Terraform state operations.
How I use the gh-dash gh CLI extension to manage GitHub notifications.
Some notes on my experience implementing Backstage for a large engineering organization.
Some introductory tips on building gh CLI extensions in Go.
An introduction to the Kubernetes controller pattern.
An introduction to the Kubernetes operator pattern.
A brief overview of IP addressing, with a focus on CIDR notation and an introduction to ipcalc.
A case study illustrating Terraform techniques for expressing moderately complex business logic.
Collect all pages of data from a paginated HTTP API in JavaScript using async/await.
Fetch the latest patch release of each of the latest 5 minor versions of Grafana
An introduction to Terraform provider development patterns
How can the aws-sdk be mocked using jest?
An introduction to leveraging multi-stage container image builds.
An introduction to using terraputs.
An introduction to using custom repository dispatch events to trigger GitHub Actions.
Leveraging concurrency in Go tests.
Automating Terraform plan analysis with Open Policy Agent
Terraform workspaces, their arguable advantages, and some thoughts on naming convention.
A brief, beginners' guide and cheat sheet to Unix file permissions.
An(other) introduction to Go concurrency, goroutines, and channels.
A technique for creating Go HTTP middleware.
A personal systemd overview and cheat sheet
How to develop and test Ansible roles with Molecule and Docker.
How to implement a custom Concourse resource type.
A brief intro to Go concurrency through channels and goroutines.
How to commit to a git repo from Concourse using the git resource.
How to avoid serializing an empty struct to JSON in Go?
For Artclash’s 2017 West Philadelphia Fun-a-Day show, I drew 31 West Philadelphia-inspired illustrations, one each day through the month of January.
How to verify a Docker image pull request in ConcourseCI.
How to use Ruby OptionParser in Rake
Authenticated downloads with Ansible
Debugging an exhausted Apache worker thread pool.
How to ensure the secure flag is present in your Apache-fronted Rails app's session cookies.
How to run a headless Firefox on Travis CI via Xvfb
An overview of my JSConf 2015 talk on headlessly testing against real web browsers.
How to ensure against persistant cookies and local storage data between installs of an nw.js app.
How to create a Windows app installer on the Mac OS command line using makensis.
18" x 24" micron pen drawing for Hopscotch Coffee’s Bloomington, IN shop.