Поддержка OpenTofu
TerraCi полноценно поддерживает OpenTofu, open-source форк Terraform.
Конфигурация
Переключитесь на OpenTofu, задав бинарник в верхнеуровневой секции execution::
execution:
binary: tofu
extensions:
# Для GitLab CI
gitlab:
image: "ghcr.io/opentofu/opentofu:1.6"
# Для GitHub Actions (бинарник на стороне провайдера не задаётся; образ задают шаги воркфлоу)
github:
runs_on: ubuntu-latestКак это работает
При установке execution.binary: tofu, TerraCi:
- Записывает
tofuв Terraform operation внутри pipeline IR - Использует
tofuво всех генерируемых скриптах - Выбирает OpenTofu image по умолчанию для GitLab, если custom image не настроен
Сгенерированный пайплайн
default:
image: ghcr.io/opentofu/opentofu:1.6
before_script:
- tofu init
plan-platform-prod-vpc:
script:
- cd platform/prod/us-east-1/vpc
- tofu plan -out=plan.tfplan
# ...
apply-platform-prod-vpc:
script:
- cd platform/prod/us-east-1/vpc
- tofu apply plan.tfplan
# ...Официальные образы OpenTofu
Используйте официальные Docker-образы OpenTofu:
| Образ | Описание |
|---|---|
ghcr.io/opentofu/opentofu:latest | Последняя стабильная |
ghcr.io/opentofu/opentofu:1.6 | Версия 1.6.x |
ghcr.io/opentofu/opentofu:1.6.0 | Конкретная версия |
Смешанные окружения
Если у вас есть модули и на Terraform, и на OpenTofu, можно переопределять настройки на уровне отдельных джобов:
# В вашем шаблоне пайплайна
.tofu-job:
image: ghcr.io/opentofu/opentofu:1.6
.terraform-job:
image: hashicorp/terraform:1.6Затем расширяйте сгенерированные джобы по необходимости.
Совместимость состояний
OpenTofu совместим с файлами состояния Terraform. Можно:
- Сохранить существующие state-файлы Terraform
- Мигрировать на OpenTofu без изменения state
- Использовать те же S3/GCS бэкенды
Разрешение зависимостей TerraCi работает идентично для обоих инструментов.
Руководство по миграции
С Terraform на OpenTofu
Обновите
.terraci.yaml:yamlexecution: binary: tofu extensions: # GitLab CI gitlab: image: "ghcr.io/opentofu/opentofu:1.6" # GitHub Actions github: runs_on: ubuntu-latestПерегенерируйте пайплайны:
bashterraci generate -o .gitlab-ci.ymlПротестируйте с dry-run:
bashterraci generate --dry-runЗакоммитьте и запушьте
Постепенная миграция
Мигрируйте модуль за модулем, используя переопределение джобов:
# Переопределение конкретных джобов для OpenTofu
apply-platform-prod-vpc:
extends: .tofu-jobСовместимость версий
TerraCi работает с:
| Инструмент | Поддерживаемые версии |
|---|---|
| Terraform | 0.12+ |
| OpenTofu | 1.0+ |
Парсинг HCL совместим с обоими инструментами.
Выбор бинарника
execution.binary принимает каноничные runtime-значения terraform и tofu. TerraCi записывает выбранный бинарник в Terraform jobs внутри IR, а providers/local execution рендерят команды напрямую из operation:
execution:
binary: tofuПеременные окружения
Переменные окружения для OpenTofu добавляйте через execution.env. Они применяются только к Terraform plan/apply jobs, а не к provider workflow globals или standalone plugin command jobs:
execution:
binary: tofu
env:
TF_CLI_CONFIG_FILE: "/etc/tofu/config.tfrc"
TOFU_LOG: "INFO"
extensions:
# GitLab
gitlab:
variables:
TF_CLI_CONFIG_FILE: "/etc/tofu/config.tfrc"
# GitHub Actions
github:
env:
TF_CLI_CONFIG_FILE: "/etc/tofu/config.tfrc"Следующие шаги
- Быстрый старт — установка TerraCi и настройка первого проекта
- Настройка GitLab CI — полный справочник опций пайплайна GitLab