Are you ready to supercharge your infrastructure as code (IaC) game for MuleSoft's Anypoint Platform? Look no further! The Terraform Anypoint Provider empowers you to manage Anypoint resources seamlessly using Terraform.
Terraform is the industry-standard tool for building, changing, and versioning infrastructure efficiently. With Terraform, you can describe your infrastructure as code, apply version control, and automate provisioning and configuration tasks.
Anypoint Platform by MuleSoft is a leading integration platform that allows you to connect applications, data, and devices in the cloud and on-premises. It's a powerful tool for API management, integration, and more.
The Terraform Anypoint Provider bridges the gap between these two worlds. It enables you to define your Anypoint resources, configurations, and integrations in code, providing you with the ability to automate deployments, enhance collaboration, reduce errors, and track changes with ease.
In this repository, you'll discover:
-
Provider Code: The source code for the Terraform Anypoint Provider, which allows you to interact with Anypoint Platform resources in your Terraform configurations.
-
Documentation: Detailed guides, examples, and reference materials to help you get started and make the most of the Terraform Anypoint Provider.
-
Issues and Contributions: A space to report issues, suggest improvements, and contribute to the development of the provider. We welcome your contributions and feedback!
This provider uses the anypoint platform APIs to perform actions for each one of the implemented resources.
We use the anypoint client library as an abstraction layer to perform actions on the platform.
For better maintainability and in order to speed up the development process, the anypoint client library is a library generated from OAS3 specifications written by the community.
The following image describes the delivery cycle:
The cycle is composed of 3 steps:
- Pick one resource and understand how it works using tools like Postman, anypoint's documentation and your favorite browser's inspector.
- Create the OAS3 specification. The specification should at least contain GET, POST and DELETE operations. The specification should be contributed here. Using the OAS spec, a go module will be generated and pushed here.
3. Implement the resource and related data sources in the provider using the generated library.
Run the following command to build the provider
go build -o terraform-provider-anypoint
N.B: As of Go 1.13 make sure that your GOPRIVATE
environment variable includes github.com/mulesoft-anypoint
go env -w GOPRIVATE=github.com/mulesoft-anypoint
First, build and install the provider.
make install
Then, navigate inside the examples
folder, and update your credentials in main.tf
.
Run the following command to initialize the workspace and apply the sample configuration.
terraform init && terraform apply
If you prefer to have your credentials in a separate file, create a params.tfvars.json
file in the examples
folder. Then add your parameters as shown in the example below:
{
"client_id": "REMPLACE_HERE",
"client_secret": "REMPLACE_HERE",
"org_id": "REMPLACE_HERE"
}
Make sure to add the params file when you apply your terraform configuration as follow:
terraform init && terraform apply -var-file="params.tfvars.json"
First build the project using
go build
You should have a new file terraform-provider-anypoint
in the root of the project. To start the provider in debug mode execute the following:
dlv exec --headless ./terraform-provider-anypoint -- --debug
Once executed, connect your debugger (whether it's your IDE or the debugger client) to the debugger server. The following is an example of how to start a client debugger:
dlv connect 127.0.0.1:51495
Then have your client debugger continue
execution (check the help for more info) then your provider should print something like:
TF_REATTACH_PROVIDERS='{"anypoint.mulesoft.com/automation/anypoint":{"Protocol":"grpc","Pid":69612,"Test":true,"Addr":{"Network":"unix","String":"/var/folders/yc/k0_j_x0945jdthsw7fzw5ysh0000gp/T/plugin598168131"}}}'
Now you can run terraform using the debugger, here's an example:
TF_REATTACH_PROVIDERS='{"anypoint.mulesoft.com/automation/anypoint":{"Protocol":"grpc","Pid":69612,"Test":true,"Addr":{"Network":"unix","String":"/var/folders/yc/k0_j_x0945jdthsw7fzw5ysh0000gp/T/plugin598168131"}}}' terraform apply --auto-approve -var-file="params.tfvars.json"
N.B: Make sure that your script uses the source
anypoint.mulesoft.com/automation/anypoint
. Otherwise, it won't work.
Use log
package to log. Here's an exampe:
log.Println("[DEBUG] Something happened!")
You can find the documentation here.
We use tfplugindocs to generate the documentation.
Follow documentation.
We believe in the power of community collaboration. Join our community forum to ask questions, share your experiences, and connect with fellow developers and DevOps enthusiasts using the Terraform Anypoint Provider.
You can contribute by:
- Testing the tool and letting us know of any problems you encounter.
- Contributing specifications for resources here.
- Contributing code in the provider itself here.
Made with love.
This is an Open Source Software, please review the considerations. This is an open source project, it does not form part of the official MuleSoft product stack, and is therefore not included in MuleSoft support SLAs. Issues should be directed to the community, who will try to assist on a best endeavours basis. This application is distributed as is.
Let's automate, simplify, and supercharge your Anypoint deployments with Terraform!