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 aDELETErequest 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 Orderstruct (defined inmodels.go).
- Deletes an existing order. The method invokes the API client's DeleteOrdermethod.
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.