Skip to content

TerraCiГенератор пайплайнов Terraform

Генерация GitLab CI пайплайнов с учётом зависимостей для Terraform/OpenTofu монорепозиториев

TerraCi

Установка

bash
# Homebrew (macOS/Linux)
brew install edelwud/tap/terraci

# Go
go install github.com/edelwud/terraci/cmd/terraci@latest

# Docker
docker run --rm -v $(pwd):/workspace ghcr.io/edelwud/terraci:latest generate

Использование

bash
# Инициализация конфига
terraci init

# Генерация пайплайна
terraci generate -o .gitlab-ci.yml

# Только изменённые модули
terraci generate --changed-only --base-ref main

Как это работает

1. Поиск модулей по структуре директорий:

platform/prod/eu-central-1/
├── vpc/        → platform/prod/eu-central-1/vpc
├── eks/        → platform/prod/eu-central-1/eks
└── rds/        → platform/prod/eu-central-1/rds

2. Извлечение зависимостей из terraform_remote_state:

hcl
# eks/main.tf
data "terraform_remote_state" "vpc" {
  backend = "s3"
  config = {
    key = "platform/prod/eu-central-1/vpc/terraform.tfstate"
  }
}

3. Построение порядка выполнения:

Уровень 0: vpc (нет зависимостей)
Уровень 1: eks, rds (зависят от vpc)

4. Генерация пайплайна:

yaml
stages:
  - plan-0
  - apply-0
  - plan-1
  - apply-1

plan-vpc:
  stage: plan-0

apply-vpc:
  stage: apply-0
  needs: [plan-vpc]

plan-eks:
  stage: plan-1
  needs: [apply-vpc]

Конфигурация

yaml
# .terraci.yaml
structure:
  pattern: "{service}/{environment}/{region}/{module}"

gitlab:
  image: hashicorp/terraform:1.6
  plan_enabled: true

exclude:
  - "*/test/*"

Полный справочник конфигурации →

Released under the MIT License.