Implement Terraform Provider actions using the Plugin Framework. Use when developing imperative operations that execute at lifecycle events (before/after create, update, destroy).
View on GitHubhashicorp/agent-skills
terraform-provider-development
February 1, 2026
Select agents to install to:
npx add-skill https://github.com/hashicorp/agent-skills/blob/main/terraform/provider-development/skills/provider-actions/SKILL.md -a claude-code --skill provider-actionsInstallation paths:
.claude/skills/provider-actions/# Terraform Provider Actions Implementation Guide
## Overview
Terraform Actions enable imperative operations during the Terraform lifecycle. Actions are experimental features that allow performing provider operations at specific lifecycle events (before/after create, update, destroy).
**References:**
- [Terraform Plugin Framework](https://developer.hashicorp.com/terraform/plugin/framework)
- [Terraform Actions RFC](https://github.com/hashicorp/terraform/blob/main/docs/plugin-protocol/actions.md)
## File Structure
Actions follow the standard service package structure:
```
internal/service/<service>/
├── <action_name>_action.go # Action implementation
├── <action_name>_action_test.go # Action tests
└── service_package_gen.go # Auto-generated service registration
```
Documentation structure:
```
website/docs/actions/
└── <service>_<action_name>.html.markdown # User-facing documentation
```
Changelog entry:
```
.changelog/
└── <pr_number_or_description>.txt # Release note entry
```
## Action Schema Definition
Actions use the Terraform Plugin Framework with a standard schema pattern:
```go
func (a *actionType) Schema(ctx context.Context, req action.SchemaRequest, resp *action.SchemaResponse) {
resp.Schema = schema.Schema{
Attributes: map[string]schema.Attribute{
// Required configuration parameters
"resource_id": schema.StringAttribute{
Required: true,
Description: "ID of the resource to operate on",
},
// Optional parameters with defaults
"timeout": schema.Int64Attribute{
Optional: true,
Description: "Operation timeout in seconds",
Default: int64default.StaticInt64(1800),
Computed: true,
},
},
}
}
```
### Common Schema Issues
**Pay special attention to the schema definition** - common issues after a first draft:
1. **Type Mismatches**
-