https://github.com/driftive/driftive
Detect state drifts in your Terraform/Terragrunt/OpenTofu projects
https://github.com/driftive/driftive
opentofu state-drifts tacos terraform terragrunt
Last synced: 8 months ago
JSON representation
Detect state drifts in your Terraform/Terragrunt/OpenTofu projects
- Host: GitHub
- URL: https://github.com/driftive/driftive
- Owner: driftive
- License: apache-2.0
- Created: 2024-06-08T17:27:41.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-05T04:03:37.000Z (10 months ago)
- Last Synced: 2024-12-05T04:27:30.775Z (10 months ago)
- Topics: opentofu, state-drifts, tacos, terraform, terragrunt
- Language: Go
- Homepage:
- Size: 1.4 MB
- Stars: 11
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![]()
# Driftive
Driftive is a tool for detecting drift in Terragrunt/Terraform/OpenTofu projects.
## Features
* Concurrently analyze multiple projects in a repository
* Slack notifications
* Creates GitHub issues for detected drifts
* Supports Terraform, Terragrunt, and OpenTofu projects## Installation
### CLI
Homebrew
```bash
$ brew install driftive/tap/driftive
```## Usage
### CLI usage
```bash
$ driftive --help
$ driftive --repo-path /path/to/projects/repo --slack-url https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX
```### Docker usage
```bash
docker pull driftive/driftive:x.y.z
docker run driftive/driftive:x.y.z --help
```### GitHub Action
Driftive can be used as a GitHub action. Check it out [here](https://github.com/marketplace/actions/driftive)### Configuration
#### CLI options
* `--repo-path` - path to the repository directory containing projects (takes precedence over `--repo-url`)
* `--slack-url` - Slack webhook URL for notifications
* `--concurrency` - number of concurrent projects to analyze (default: 4)
* `--log-level` - log level. Available options: `debug`, `info`, `warn`, `error` (default: `info`)
* `--stdout` - log state drifts to stdout (default: `true`)
* `--github-token` - GitHub token for accessing private repositories
* `--repo-url` - URL of the repository containing the projects
* `--branch` - branch to analyze (default: `main`). Required in case of `--repo-url`#### Repository configuration
Driftive expects a `driftive.yml` file in the root directory of the repository.
It supports the following configuration options:
* `auto_discover` - auto-discover projects in the repository
* `enabled` - enable auto-discovery
* `inclusions` - list of glob patterns to include
* `exclusions` - list of glob patterns to exclude
* `project_rules` - list of project rules to apply. Project rules are evaluated in the order they are defined. If a file matches multiple patterns, the first matching rule is used.
* `pattern` - glob pattern to match the files
* `executable` - executable to use for the files matching the pattern. Supported executables: `terraform`, `terragrunt`, `tofu`
* `github` - GitHub configuration
* `summary` - create a summary issue
* `enabled` - enable summary issue. requires issues to be enabled.
* `issue_title` - title of the summary issue
* `issues` - GitHub issues configuration
* `enabled` - enable GitHub issues
* `close_resolved` - close resolved issues
* `max_open_issues` - maximum number of drift issues to keep open
* `errors` - create issues for projects with errors
* `enabled` - enable GitHub issues for projects with errors
* `close_resolved` - close resolved issues
* `max_open_issues` - maximum number of issues to keep open
* `labels` - list of labels to apply to the issues
Example configuration:
```yaml
auto_discover:
enabled: true
inclusions:
- '**/*.tf'
- '**/terragrunt.hcl'exclusions:
- '**/modules/**'
- '**/.terragrunt-cache/**'
- '**/.terraform/**'
- '/terragrunt.hcl' # exclude root terragrunt.hclproject_rules:
- pattern: 'terragrunt.hcl'
executable: 'terragrunt'- pattern: "*.tf"
executable: "terraform"github:
summary:
enabled: true # create a summary issue. It requires issues to be enabled
issue_title: "Driftive Summary"
issues:
enabled: true # create issues for detected drifts
close_resolved: true
max_open_issues: 10
labels:
- "drift"
errors:
enabled: true # create issues for projects with errors
close_resolved: true
max_open_issues: 5
labels:
- "plan-failed"
```### Github issues
Driftive supports creating GitHub issues for detected drifts. To enable this feature, you need to provide a GitHub token using the `--github-token` and `--github-issues=true` options and have the GITHUB_CONTEXT environment variable set.
In Github actions, you can set the GITHUB_CONTEXT like this:
```yaml
jobs:
driftive:
runs-on: ubuntu-latest
steps:
- name: Run driftive
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: driftive --repo-path=. --github-token=${{ secrets.GITHUB_TOKEN }} --github-issues=true
```
### Slack notifications
Driftive supports sending notifications to Slack. To enable this feature, you need to provide a Slack webhook URL.
