INTRODUCTION
Here’s a typical workflow for implementing and running Kitchen Terraform tests outside of the GCP environment, for example, from an IDE on a Mac laptop.
Enable “gcloud” Access
Command:
gcloud auth login
The first step is to ensure we can interact with GCP using the gcloud command using our user credential. This is needed because the tests use the gcloud commands to retrieve GCP resource information in order to do the assertions.
Enable SDK Access
Command:
gcloud auth application-default login
This ensures our Terraform code can run the GCP SDK successfully without a service account. Instead, it will use our user credential.
Without this command, we may get the following error when running the Terraform code:
Response: {
"error": "invalid_grant",
"error_description": "reauth related error (invalid_rapt)",
"error_subtype": "invalid_rapt"
}
Display All Kitchen Test Suites
Command:
bundle exec kitchen list
This command displays a list of Kitchen test suites defined in kitchen.yml.
The output looks something like this:
Instance Driver Provisioner Verifier Transport Last Action Last Error
router-all-subnets-ip-ranges-local Terraform Terraform Terraform Ssh
router-interface-local Terraform Terraform Terraform Ssh
router-no-bgp-no-nat-local Terraform Terraform Terraform Ssh
router-with-bgp-local Terraform Terraform Terraform Ssh
router-with-nat-local Terraform Terraform Terraform Ssh
Run a Specific Test Suite
Command:
bundle exec kitchen test [INSTANCE_NAME]
# For example:-
bundle exec kitchen test router-with-nat-local
This command allows us to run a specific test suite. This will handle the entire Terraform lifecycle… ie: setting up the infrastructure, running the tests and destroying the infrastructure.
This is helpful especially when we need to run just the test suite that is currently under development. This way, it runs faster because we don’t have to provision/deprovision the cloud infrastructure for other test suites. At the same time, we will also reduce the incurred cost.
Run a Specific Test Suite with Finer Controls
There are times where running bundle exec kitchen test [INSTANCE_NAME] is still very time consuming and expensive, especially when we try to debug any failed assertions or add a little assertions at a time.
To provision the infrastructure once, run the following command:
bundle exec kitchen converge [INSTANCE_NAME]
# For example:-
bundle exec kitchen converge router-with-nat-local
To run the assertions, run the following command as many times as possible until all the assertions are implemented successfully:
bundle exec kitchen verify [INSTANCE_NAME]
# For example:-
bundle exec kitchen verify router-with-nat-local
Finally, once the test suite is implemented properly, we can now deprovision the infrastructure:
bundle exec kitchen destroy [INSTANCE_NAME]
# For example:-
bundle exec kitchen destroy router-with-nat-local
Leave a Reply