Parse and validate kustomize output
Project description
pytest_kustomize
Parse and validate kustomize output
Example
from pytest_kustomize import resolve_configmaps, extract_externalsecret_data
import pytest
@pytest.mark.parametrize("environment, value", [
("staging", "shared-db.staging.example.com"),
("production", "myservice-db.production.example.com"),
])
def test_database_matches_environment(kustomize_resources, environment, value):
config = resolve_configmaps(kustomize_resources[environment])
for deployment in ["webui", "api"]:
assert config[deployment]["db_host"] == value
def test_production_has_no_staging_vault_paths(kustomize_resources):
for secret in extract_externalsecret_data(kustomize_resources["production"]).values():
assert "staging" not in secret["key"]
@pytest.mark.parametrize("environment", ["staging", "production"])
def test_jq(kustomize_jq, environment):
for apiVersion in kustomize_jq(
""".[] | select(."kind"=="ConfigMap").apiVersion""", environment
):
assert apiVersion == "v1"
Usage
You can access the kustomize output as follows:
- The
kustomize_manifestsfixture returns adict[str, str], environment name:kustomize buildoutput - The
kustomize_resourcesfixture returns adict[str, List[dict]], environment name: yaml-parsed output - The
kustomize_jqfixture returns a query helper which applies ato the given environment and returns an instance of
. Only available by explicitly installing
jq(orpytest_kustomize[jq])
Optionally, define the directory where kustomize manifests are looked up by providing this fixture
@pytest.fixture(scope="session")
def kustomize_root_directory():
return "/path/to/kustomizations"
Default: ./k8s
Optionally, define for which subdirectories manifests should be generated by providing this fixture
@pytest.fixture(scope="session")
def kustomize_environment_names():
return ["overlays/staging", "overlays/production"]
Default: All direct subdirectories that contain a kustomization.yaml
API
The package provides these helper functions:
resolve_configmaps()resolvesenvFromreferences toConfigMaps inDeployments. It takes a list of yaml dicts (usuallykustomize_resources[environment]) and returns adict[str, dict[str, str]], deployment+container name: {key: value}. The dict keys work as follows:- Containers are named
{deployment}-{container} - Init Containers are named
{deployment}-init-{container} - For convenience, the first container is also available just under the name
{deployment}, and the first init container as{deployment}-init
- Containers are named
extract_externalsecret_data()extracts thedatasections of allExternalSecretresources. It takes a list of yaml dicts and returns{"key_in_secret": {"key": "example/vault/path", "property": "token"}}
These take an optional name_transform callable which defaults to lambda x: x.rsplit('-', 1)[0], to normalize e.g. kustomize-generated ConfigMap names like project-44fb7dkk64.
pytest_kustomize Changes
1.3.1 (2025-12-08)
- Make jq an optional dependency (jq)
1.3.0 (2025-12-08)
- Make jq an optional dependency (jq)
1.2.0 (2025-10-02)
- Allow querying manifests via jq
1.1.0 (2025-07-09)
- Parse all containers and initContainers in
resolve_configmaps(initcontainer) - Normalize names by splitting on the last dash, not the first (nametrans)
1.0.0 (2025-07-03)
- Initial release (initial)
Project details
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytest_kustomize-1.3.1.tar.gz.
File metadata
- Download URL: pytest_kustomize-1.3.1.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c729395a27ffbd803a60c251444db1856745ebaec4ac23fe6a02f80dcd45fabc
|
|
| MD5 |
7fca9378f6212ab77d8d305ff1b0b1a7
|
|
| BLAKE2b-256 |
2319263171626fa4dc46b1311e07633a96cde2e41dea0103f5183d65189987b4
|
File details
Details for the file pytest_kustomize-1.3.1-py3-none-any.whl.
File metadata
- Download URL: pytest_kustomize-1.3.1-py3-none-any.whl
- Upload date:
- Size: 4.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dc01ffcbd72f4b0a5d696d4610db8f796b4765783cf21f93aa1e2b44c4bcae6
|
|
| MD5 |
97f5a98e1ebc9cc588d10a3f10f36920
|
|
| BLAKE2b-256 |
6958712d998effa32057418f5bddecde2b83b11e51e68941bb4049a936120d6d
|