Terraform and Terragrunt fixtures for pytest
Project description
pytest-terra-fixt
With the use of this plugin, users can run Terragrunt and Terraform commands within Pytest fixtures. Under the hood, the fixtures within this plugin use the awesome tftest Python package.
Fixtures
terra
:
- Scope: Function
- Input: (passed within `pytest.mark.parametrize("terra", [{}]))
command
: Terraform or Terragrunt command to run (e.g. init, plan, apply)binary
: Path to binary (must end withterraform
or `terragrunt)tfdir
: Absolute or relative path tobasedir
basedir
: Base directory fortfdir
(defaults to cwd)env
: Environment variables to pass to the commandskip_teardown
: Skips running fixture's teardown logicget_cache
: IfTrue
, gets command output fromterra_cache
fixtureextra_args
: Dictionary of extra arguments to pass to the command
- Setup: Updates cache with selected kwargs provided
- Yield: If
get_cache
isTrue
, yields output for the inputcommand
from theterra_cache
fixture. Ifget_cache
isFalse
, yields output from the execution of the command - Teardown: Runs
terraform destroy -auto-approve
on the inputtfdir
directory
terra_factory
:
- Scope: Session
- Input: (passed within `pytest.mark.parametrize("terra", [{}]))
command
: Terraform or Terragrunt command to run (e.g. init, plan, apply)binary
: Path to binary (must end withterraform
or `terragrunt)tfdir
: Absolute or relative path tobasedir
basedir
: Base directory fortfdir
(defaults to cwd)env
: Environment variables to pass to the commandskip_teardown
: Skips running fixture's teardown logicget_cache
: IfTrue
, gets command output fromterra_cache
fixtureextra_args
: Dictionary of extra arguments to pass to the command
- Setup: Updates cache with selected kwargs provided
- Yield: If
get_cache
isTrue
, yields output for the inputcommand
from theterra_cache
fixture. Ifget_cache
isFalse
, yields output from the execution of the command - Teardown: Runs
terraform destroy -auto-approve
on every factory instance's inputtfdir
directory
terra_cache
:
- Scope: Session
- Setup: Runs
terraform init
on the specified directory - Yield: Factory fixture that returns a
tftest.TerraformTest
ortftest.TerragruntTest
object that can run subsequent methods with - Teardown: Clears cache dictionary
CLI Arguments
--skip-teardown
: Skips running terraform destroy -auto-approve
on teardown and preserves the Terraform backend tfstate for future testing. This flag is useful for checking out the Terraform resources within the cloud provider console or for running experimental tests without having to wait for the resources to spin up after every Pytest invocation.
NOTE: To continually preserve the Terraform tfstate, the --skip-teardown flag needs to be always present, or else the `terra` or `terra_factory` fixtures' teardown may destroy the Terraform resources and remove the tfstate file.
Examples
Returns tftest object
terra
import pytest
@pytest.mark.parametrize("terra", [
{
"binary": "terraform",
"tfdir": "bar",
"env": {
"TF_LOG": "DEBUG"
},
"skip_teardown": False,
}
], indirect=['terra'])
def test_terra_param(terra):
terra.apply(auto_approve=True)
output = terra.output()
assert output["doo"] == "foo"
Run commands within fixture:
terra
import pytest
@pytest.mark.parametrize("terra", [
{
"binary": "terraform",
"command": "apply",
"tfdir": "bar",
"env": {
"TF_LOG": "DEBUG"
},
"skip_teardown": False,
"get_cache": False,
"extra_args": {"state_out": "/foo"},
}
], indirect=['terra'])
def test_terra_param(terra):
assert terra == "zoo"
terra_factory
def test_terra_param(terra):
plan = terra_factory(binary="terraform", command="plan", tfdir="bar", skip_teardown=True)
assert plan["doo"] == "zoo"
Installation
Install via Pip:
pip install pytest-terra-fixt
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pytest-terra-fixt-0.5.1.tar.gz
.
File metadata
- Download URL: pytest-terra-fixt-0.5.1.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4ef310b93e4b36c2ac6d5ce90d49b7c2334d4d3fe5670a97ed865c760c589f0b |
|
MD5 | 584831ef659efacb90726325ab1cb343 |
|
BLAKE2b-256 | 8fbeceb021f48f11f127d9b94288db90cf3f96e7caa77998d56398d02c372d79 |
File details
Details for the file pytest_terra_fixt-0.5.1-py3-none-any.whl
.
File metadata
- Download URL: pytest_terra_fixt-0.5.1-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba6396884887db47edcfcf93a1c719549962dd3163baa57ea36f0c5e4b7c9191 |
|
MD5 | 19aac6561dca388ad4fc524f9ba18218 |
|
BLAKE2b-256 | 2bfb684158b357bde5f31c4d969ea538d40707a6cfd304fb72fde7549afab1c5 |