HashiTalks 2024: Mastering Terraform Testing, a layered approach to testing complex infrastructure

HashiTalks 2024: Mastering Terraform Testing, a layered approach to testing complex infrastructure
This blog post is the writeup of my talk at HashiTalks 2024 on the Terraform test framework. I discuss a layered approach to testing where we begin by using declarative validation in our Terraform modules and follow this up with successively more advanced tests. I will also discuss the need for policy-as-code because not everything makes sense as tests, some things should be policies.
Read more →

Take your testing to the cloud

Take your testing to the cloud
I have written a lot about the new Terraform testing framework, but there is one piece of the puzzle that I have written almost nothing about: Terraform Cloud. In this post I will go through how to publish a module to a private Terraform Cloud registry and enable testing for the module. I will also show you the new test generation using AI.
Read more →

Test permutations with Terraform and GitHub Actions

Test permutations with Terraform and GitHub Actions
I continue my exploration of the new Terraform testing framework with this post where I demonstrate how to run permutations of a given test using GitHub Actions. Specifically I’ll dive into an example where our module depend on a different module, and we are required to support a given number of recent versions of this module.
Read more →

Testing Framework in Terraform 1.6: A deep-dive

Testing Framework in Terraform 1.6: A deep-dive
This post follows up on my comprehensive guide to testing in Terraform. The testing framework is new and untested (pun not intended), but it already offers a lot of possibilities that will lead to better Terraform modules. In this post I will explore all the options that are available in the new run block and the new terraform test command.
Read more →

The issue of recursive module calls in declarative infrastructure-as-code

The issue of recursive module calls in declarative infrastructure-as-code
What to do when you are not allowed to use recursive module calls in your declarative infrastructure-as-code? Use imperative infrastructure-as-code!
Read more →

A Comprehensive Guide to Testing in Terraform: Keep your tests, validations, checks, and policies in order

A Comprehensive Guide to Testing in Terraform: Keep your tests, validations, checks, and policies in order
You have many options to use when it comes to testing and validating your Terraform configurations and modules. The newest addition to these options is the native Terraform testing framework. This in combination with custom conditions, check blocks, and policies allow for creating robust infrastructure-as-code. This post is a comprehensive guide to testing and validation in Terraform.
Read more →

HashiConf 2023

HashiConf 2023
This week I attended HashiConf in San Francisco. In this post I summarize my experience and what I thought about the conference!
Read more →

Importing resources with Terraform before and after Terraform 1.5

Importing resources with Terraform before and after Terraform 1.5
In this post I compare how to import resources into your Terraform state using the traditional CLI-driven method with the new method using import blocks. This is a new feature in Terraform 1.5 and as we will see an improvement over the traditional method.
Read more →

The new Terraform Cloud pricing model is so expensive! Or is it?

The new Terraform Cloud pricing model is so expensive! Or is it?
What’s up with the new Terraform Cloud pricing model?
Read more →

Administering Terraform Cloud using GitHub Actions

Administering Terraform Cloud using GitHub Actions
In this post I show how I have created a few custom GitHub actions to allow me to create workspaces in Terraform Cloud automatically as well as triggering runs and applying variable sets to my workspace. I go through details about how to create custom GitHub actions using the Docker action type. I also show a complete GitHub workflow where I use my custom actions to automatically create new Terraform Cloud workspaces when a pull request is opened, and to automatically delete the workspace when the pull request is closed.
Read more →