RSSAmplifier

Blog

Mike Ball

Recent content on Mike Ball

mikeball.infoRSS feed ↗102 posts

Latest posts

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?

Verifying and validating Terraform: techniques for testing infrastructure-as-code

An overview of techniques for testing Terraform, from linting to end-to-end testing.

Testing JavaScript with node:test

Using Node.js's built-in test runner and assertion library to avoid third-party test dependencies.

Terraform: natively reading GitHub release assets

Reading release assets in Terraform via the `github_release_asset` data source.

Infinity Cats

Cats forever wallpaper prints, made to order in the dimensions of your choosing. Reach out for pricing and details.

Terraform: self-validating plan-time permissions checks

How can a Terraform configuration test whether it has sufficient access to do its own work?

Packer: conditionally omit HCL block configuration

Conditionally configure AWS EC2 launch block device mappings in a Packer template.

Terraform Patterns: the wrapper module

An overview of the Terraform wrapper module pattern.

Scalable Terraform Patterns: Reuse and Repeatability

An overview of native Terraform constructs enabling reuse and repeatability.

Scalable Terraform patterns: compound workspace names

My overview of the Terraform compound workspace name pattern.

Automated Terraform Plan Analysis With Terratest

How can terratest be used to automate Terraform plan analysis?

Unit Testing AWS S3 Downloads in Go

How can a function wrapping the aws-sdk-go be unit tested using a local directory serving as a mock AWS S3 bucket?

Using tfmigrate to Codify and Automate Terraform State Operations

A demo illustrating the use of `tfmigrate` for automating complex Terraform state operations.

Using the gh-dash gh CLI Extension to Manage GitHub Notifications

How I use the gh-dash gh CLI extension to manage GitHub notifications.

Notes on Implementing Backstage

Some notes on my experience implementing Backstage for a large engineering organization.

Extending the gh CLI with Go

Some introductory tips on building gh CLI extensions in Go.

What is the Kubernetes controller pattern?

An introduction to the Kubernetes controller pattern.

What is the Kubernetes Operator Pattern?

An introduction to the Kubernetes operator pattern.

IP addressing, Networks, Subnets, and CIDR

A brief overview of IP addressing, with a focus on CIDR notation and an introduction to ipcalc.

Advanced Terraform Logic

A case study illustrating Terraform techniques for expressing moderately complex business logic.

Collecting Paginated HTTP API Response Data Using JavaScript's async/await

Collect all pages of data from a paginated HTTP API in JavaScript using async/await.

Querying GitHub Release Data With gh and jq

Fetch the latest patch release of each of the latest 5 minor versions of Grafana

Terraform Provider Development Demystified

An introduction to Terraform provider development patterns

Mocking aws-sdk With Jest

How can the aws-sdk be mocked using jest?

Multi-stage Docker Builds

An introduction to leveraging multi-stage container image builds.

Transforming Terraform Output Values to Markdown with Terraputs

An introduction to using terraputs.

Triggering GitHub Actions From Outside of GitHub

An introduction to using custom repository dispatch events to trigger GitHub Actions.

Go Test Parallelization

Leveraging concurrency in Go tests.

Terraform Plan Validation With Open Policy Agent

Automating Terraform plan analysis with Open Policy Agent

Using Terraform workspaces

Terraform workspaces, their arguable advantages, and some thoughts on naming convention.

An Intro to Unix File Permissions

A brief, beginners' guide and cheat sheet to Unix file permissions.

Go Concurrency With Goroutines and Channels

An(other) introduction to Go concurrency, goroutines, and channels.

HTTP Middleware in Go with httptest.ResponseRecorder

A technique for creating Go HTTP middleware.

A systemd Cheat Sheet

A personal systemd overview and cheat sheet

Testing Ansible Roles With Docker-in-Docker

How to develop and test Ansible roles with Molecule and Docker.

How to Make a Concourse Resource Type

How to implement a custom Concourse resource type.

Channels in Go

A brief intro to Go concurrency through channels and goroutines.

Committing Via the Concourse Git Resource

How to commit to a git repo from Concourse using the git resource.

Serialize Empty Structs to JSON in Go

How to avoid serializing an empty struct to JSON in Go?

31 West Philly Illustrations

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.

Using the ConcourseCI pull request resource to verify Docker builds

How to verify a Docker image pull request in ConcourseCI.

Using OptionParser in Rake

How to use Ruby OptionParser in Rake

Using wget over Ansible's get_url

Authenticated downloads with Ansible

Apache Persistent Connection Problems

Debugging an exhausted Apache worker thread pool.

Secure Session Cookie in Rails over HTTPS

How to ensure the secure flag is present in your Apache-fronted Rails app's session cookies.

How to Test Google Polymer elements on Travis CI

How to run a headless Firefox on Travis CI via Xvfb

JSConf 2015: Headless Testing Against Real Web Browsers

An overview of my JSConf 2015 talk on headlessly testing against real web browsers.

NW.js Chromium data-path

How to ensure against persistant cookies and local storage data between installs of an nw.js app.

Creating a Windows Installer for a node-webkit App on Mac OS

How to create a Windows app installer on the Mac OS command line using makensis.

Hopscotch Coffee Illustration

18" x 24" micron pen drawing for Hopscotch Coffee’s Bloomington, IN shop.