Terraform
Implement resource delete
In this tutorial, you will add delete capabilities to the order
resource of a provider that interacts with the API of a fictional coffee-shop application called Hashicups. To do this, you will:
- Implement resource delete.
This delete method uses the HashiCups API client to invoke aDELETE
request to the/orders/{orderId}
endpoint. After the delete is successful, the framework automatically removes the resource from Terraform's state. - Verify delete functionality.
This ensures that the resource is working as expected.
Prerequisites
To follow this tutorial, you need:
- Go 1.21+ installed and configured.
- Terraform v1.8+ installed locally.
- Docker and Docker Compose to run an instance of HashiCups locally.
Navigate to your terraform-provider-hashicups
directory.
Your code should match the 06-update-order
directory
from the example repository.
If you're stuck at any point during this tutorial, refer to the delete-order
branch to see the changes implemented in this tutorial.
Implement delete functionality
The provider uses the Delete
method to delete an existing resource.
The delete method follows these steps:
- Retrieves values from the state. The method will attempt to retrieve values from the state and convert it to an
Order
struct (defined inmodels.go
). - Deletes an existing order. The method invokes the API client's
DeleteOrder
method.
If there are no errors, the framework will automatically remove the resource from Terraform's state.
Open the internal/provider/order_resource.go
file.
Replace your Delete
method with the following.
internal/provider/order_resource.go
func (r *orderResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
// Retrieve values from state
var state orderResourceModel
diags := req.State.Get(ctx, &state)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
// Delete existing order
err := r.client.DeleteOrder(state.ID.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error Deleting HashiCups Order",
"Could not delete order, unexpected error: "+err.Error(),
)
return
}
}
Build and install the updated provider.
$ go install .
Verify delete functionality
Navigate to the examples/order
directory. This contains a sample Terraform configuration for the Terraform HashiCups provider.
$ cd examples/order
Destroy the configuration. This will delete your order.
$ terraform destroy -auto-approve
##...
Destroy complete! Resources: 1 destroyed.
Verify that the provider deleted your order by invoking the HashiCups API. Substitute the order number with your order ID and the auth token with your auth token.
$ curl -X GET -H "Authorization: ${HASHICUPS_TOKEN}" localhost:19090/orders/1
{}
Navigate to the terraform-provider-hashicups
directory.
$ cd ../..
Next steps
Congratulations! You have enhanced the order
resource with delete
capabilities.
If you were stuck during this tutorial, checkout the
07-delete-order
directory in the example repository to see the code implemented in this
tutorial.
- To learn more about the Terraform Plugin Framework, refer to the Terraform Plugin Framework documentation.
- For a full capability comparison between the SDKv2 and the Plugin Framework, refer to the Which SDK Should I Use? documentation.
- The example repository contains directories corresponding to each tutorial in this collection.
- Submit any Terraform Plugin Framework bug reports or feature requests to the development team in the Terraform Plugin Framework Github repository.
- Submit any Terraform Plugin Framework questions in the Terraform Plugin Framework Discuss forum.