Terraform Provider Kustomize
Join Our Contributors!
Introduction
The Terraform provider for Kustomize is available from the Terraform registry.
Please refer to the documentation for information on how to use the kustomization_build
and kustomization_overlay
data sources, or the kustomization_resource
resource.
This is a standalone Terraform Provider, but is also used in the Terraform GitOps framework Kubestack.
Getting Help
Community Help
If you have any questions while following the tutorial, join the #kubestack channel on the Kubernetes community. To create an account request an invitation.
Professional Services
For organizations interested in accelerating their GitOps journey, professional services are available.
Contributing
Contributions to the Kubestack framework are welcome and encouraged. Before contributing, please read the Contributing and Code of Conduct Guidelines.
One super simple way to contribute to the success of this project is to give it a star.
Development Requirements
Building and Developing the Provider
To work on the provider, you need go installed on your machine. The provider uses go mod to manage its dependencies, so GOPATH is not required.
To compile the provider, run make build
as shown below. This will build the provider and put the provider binary in the terraform.d/plugins/linux_amd64/
directory.
make build
In order to test the provider, run the acceptance tests using make test
. You have to set the KUBECONFIG_PATH
environment variable to point the tests to a valid config file. Each tests uses an individual namespaces. Kind or Minikube clusters work well for testing.
make test
Running the provider under debug
Running in debug mode is a four step process - launch the plugin in debug mode under delve, connect your IDE to delve, connect terraform to the plugin, and then run terraform. Instructions here are for Visual Studio Code, configuring other IDEs is likely to be a similar process
- Ensure you have
delve
installed - Build the plugin locally using
go build ./...
- From the terraform repository you wish to debug, run the following
If you run this outside of the terraform repository (e.g. in the plugin source directory), kustomize gets very confused when trying to find files
PLUGIN_PROTOCOL_VERSIONS=5 dlv exec --api-version=2 --listen=127.0.0.1:49188 --headless /path/to/terraform-provider-kustomization/terraform-provider-kustomize -- --debug
- In Visual Studio Code, add the following configuration to launch.json
{ "name": "Connect to server", "type": "go", "request": "attach", "mode": "remote", "remotePath": "${workspaceFolder}", "port": 49188, "host": "127.0.0.1", "apiVersion": 2, "env": { "KUBECONFIG_PATH": "${HOME}/.kube/config" }, "dlvLoadConfig": { "followPointers": true, "maxVariableRecurse": 1, "maxStringLen": 512, "maxArrayValues": 64, "maxStructFields": -1 } }
- Click the debug button and start
Connect to server
. - From the terminal you started
dlv
from, you will see something like:Set this value using exportProvider server started; to attach Terraform, set TF_REATTACH_PROVIDERS to the following: {"registry.terraform.io/kbst/kustomization":{"Protocol":"grpc","Pid":13366,"Test":true,"Addr":{"Network":"unix","String":"/var/folders/7c/wdp684z11w1_6cj0d6lgl8hw0000gn/T/plugin2650218557"}}}
TF_REATTACH_PROVIDERS={"registry...}}}
in the terminal you want to run terraform from - Set any breakpoints you wish to use
- Run terraform
Running a specific test in debug mode
-
Add the following configuration to .vscode/launch.json, updating the
TestFunctionNameGoesHere
to the name of the function you want to test:{ "name": "Launch test function", "type": "go", "request": "launch", "mode": "test", "program": "${workspaceFolder}/kustomize", "env": { "TF_ACC": "1", "KUBECONFIG_PATH": "${env:HOME}/.kube/config" }, "args": [ "-test.v", "-test.run", "^TestFunctionNameGoesHere$", ], }
-
Set any breakpoints you want to set
-
Click the debug button and choose "Launch test function" in the dropdown
Kubestack Repositories
- kbst/terraform-kubestack
- Terraform GitOps Framework - Everything you need to build reliable automation for AKS, EKS and GKE Kubernetes clusters in one free and open-source framework.
- kbst/kbst
- Kubestack Framework CLI - All-in-one CLI to scaffold your Infrastructure as Code repository and deploy your entire platform stack locally for faster iteration.
- kbst/terraform-provider-kustomization (this repository)
- Kustomize Terraform Provider - A Kubestack maintained Terraform provider for Kustomize, available in the Terraform registry.
- kbst/catalog
- Catalog of cluster services as Kustomize bases - Continuously tested and updated Kubernetes services, installed and customizable using native Terraform syntax.