mirror of
https://gitea.com/gitea/docs.git
synced 2026-06-23 12:45:56 +00:00
https://github.com/go-gitea/gitea/pull/36710 Reviewed-on: https://gitea.com/gitea/docs/pulls/357 Reviewed-by: Nicolas <173651+bircni@noreply.gitea.com> Co-authored-by: TheFox0x7 <95654+thefox0x7@noreply.gitea.com> Co-committed-by: TheFox0x7 <95654+thefox0x7@noreply.gitea.com>
100 lines
3.0 KiB
Markdown
100 lines
3.0 KiB
Markdown
---
|
|
date: "2026-03-04T00:00:00+00:00"
|
|
slug: "terraform"
|
|
sidebar_position: 118
|
|
---
|
|
|
|
# Terraform State Registry
|
|
|
|
Publish terraform states to sync it between multiple users or CI system.
|
|
|
|
## Requirements
|
|
|
|
To work with the Terraform State registry, you need to use [Terraform](https://www.terraform.io/) or [OpenTofu](https://opentofu.org/).
|
|
|
|
## Configuring the package registry
|
|
|
|
To use the Gitea Terraform State registry, you need to configure the `http` backend in your Terraform configuration.
|
|
|
|
```hcl
|
|
terraform {
|
|
backend "http" {
|
|
address = "https://gitea.example.com/api/packages/{owner}/terraform/state/{name}"
|
|
lock_address = "https://gitea.example.com/api/packages/{owner}/terraform/state/{name}/lock"
|
|
unlock_address = "https://gitea.example.com/api/packages/{owner}/terraform/state/{name}/lock"
|
|
lock_method = "POST"
|
|
unlock_method = "DELETE"
|
|
username = "{username}"
|
|
password = "{password_or_token}"
|
|
}
|
|
}
|
|
```
|
|
|
|
| Placeholder | Description |
|
|
| ----------- | ----------- |
|
|
| `owner` | The owner of the state (user or organization). |
|
|
| `name` | The name of the state. |
|
|
| `username` | Your Gitea username. |
|
|
| `password` | Your Gitea password or [personal access token](development/api-usage.md#authentication). |
|
|
|
|
If you are using 2FA or OAuth use a [personal access token](development/api-usage.md#authentication) instead of the password.
|
|
|
|
## Initialize the backend
|
|
|
|
After configuring the backend, you can initialize it with:
|
|
|
|
```shell
|
|
terraform init
|
|
```
|
|
|
|
Terraform will prompt you to migrate your state if you already have one locally.
|
|
|
|
## State Locking
|
|
|
|
Gitea supports state locking to prevent concurrent modifications. The `lock_address` and `unlock_address` should point to the `/lock` sub-route of your state URL.
|
|
|
|
- **Locking**: Performed via a `POST` request to `{address}/lock`.
|
|
- **Unlocking**: Performed via a `DELETE` request to `{address}/lock`.
|
|
|
|
Terraform handles these requests automatically when configured as shown above.
|
|
|
|
## Encrypted state
|
|
|
|
The state registry supports [encrypted state](https://opentofu.org/docs/language/state/encryption/).
|
|
|
|
## State Versions and Management
|
|
|
|
Gitea keeps track of your Terraform state versions. You can use the API to retrieve or delete specific versions.
|
|
|
|
### Fetch state
|
|
|
|
To fetch the latest version of a state:
|
|
|
|
```shell
|
|
curl --user {username}:{password_or_token} \
|
|
https://gitea.example.com/api/packages/{owner}/terraform/state/{name}
|
|
```
|
|
|
|
To fetch a specific version by its serial number:
|
|
|
|
```shell
|
|
curl --user {username}:{password_or_token} \
|
|
https://gitea.example.com/api/packages/{owner}/terraform/state/{name}/versions/{serial}
|
|
```
|
|
|
|
### Delete state
|
|
|
|
To delete the entire state and all its versions:
|
|
|
|
```shell
|
|
curl --user {username}:{password_or_token} -X DELETE \
|
|
https://gitea.example.com/api/packages/{owner}/terraform/state/{name}
|
|
```
|
|
|
|
To delete a specific version by its serial number:
|
|
|
|
```shell
|
|
curl --user {username}:{password_or_token} -X DELETE \
|
|
https://gitea.example.com/api/packages/{owner}/terraform/state/{name}/versions/{serial}
|
|
```
|