
Detect GitLab resources not managed by Terraform and generate Terraform code to bring them under management.
Uses the GitLab Terraform Provider resource definitions.
Features
- π Drift Detection: Scan GitLab groups and projects to identify resources not managed by Terraform
- π Code Generation: Automatically generate Terraform code for unmanaged resources
- π Diff Comparison: Show differences between existing and generated Terraform configurations
- π³ Docker-ready: Designed for CI/CD pipeline
Quick Start
Local Installation
go install github.com/xMoelletschi/terraform-gitlab-drift@latest
terraform-gitlab-drift scan --group my-group
GitLab CI Usage
Basic Drift Check
drift-check:
image: ghcr.io/xmoelletschi/terraform-gitlab-drift:latest
script:
- terraform-gitlab-drift scan --group $CI_PROJECT_ROOT_NAMESPACE
Configuration
Command-line Flags
| Flag |
Environment Variable |
Default |
Description |
--gitlab-token |
GITLAB_TOKEN |
- |
GitLab API token (required) |
--gitlab-url |
- |
https://gitlab.com |
GitLab instance URL |
--group |
- |
- |
Top-level group to scan (required for gitlab.com) |
--terraform-dir |
- |
. |
Path to Terraform directory |
--overwrite |
- |
false |
Overwrite files in terraform directory |
--show-diff |
- |
true |
Show diff between generated and existing files |
--verbose, -v |
- |
false |
Enable verbose (debug) logging |
--json |
- |
false |
Output logs in JSON format |
Directory Structure
The tool generates one .tf file per GitLab namespace, using normalized names (lowercase, / and - replaced with _). Your Terraform directory should follow this structure to get accurate drift detection:
terraform/
βββ backend.tf
βββ providers.tf
βββ my_group.tf # generated: top-level group + its projects
βββ my_group_sub_group.tf # generated: sub-group + its projects
βββ ...
Important: The drift check only compares files that match the generated filenames.
If you have resources defined in differently named files (e.g. main.tf, projects.tf),
they will not be detected and the tool will report those resources as unmanaged.
To fix this, move your resource definitions into the files matching the generated naming
convention, or use --overwrite to let the tool manage the file structure for you.
Supported Resources
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature)
- Push to the branch (
git push origin feature/amazing-feature)
- Open a Pull Request
Please make sure to:
- Add tests for new features
- Update documentation as needed
- Ensure CI checks pass
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Acknowledgments
Built with:
Note: This tool is not affiliated with HashiCorp or GitLab.