Фильтры
TerraCi поддерживает гибкую фильтрацию модулей через glob-паттерны.
Параметры
| Параметр | Тип | Описание |
|---|---|---|
exclude | []string | Паттерны для исключения модулей |
include | []string | Паттерны для включения модулей |
Логика фильтрации
- Если
includeне задан — включаются все обнаруженные модули - Если
includeзадан — включаются только совпадающие модули excludeвсегда применяется послеinclude
Все модули → include (если задан) → exclude → РезультатGlob-синтаксис
| Паттерн | Описание |
|---|---|
* | Любой сегмент пути |
** | Любое количество сегментов |
? | Любой одиночный символ |
[abc] | Любой символ из набора |
[a-z] | Любой символ из диапазона |
Exclude
Исключает модули, соответствующие паттернам:
exclude:
- "*/test/*" # Исключить test-окружения
- "*/sandbox/*" # Исключить sandbox
- "legacy/*/*/*/*" # Исключить legacy-сервисПримеры exclude
# Исключить конкретный регион
exclude:
- "*/*/eu-north-1/*"
# Исключить несколько окружений
exclude:
- "*/dev/*/*"
- "*/test/*/*"
# Исключить конкретные модули
exclude:
- "*/*/*/deprecated-*"
- "*/*/*/old-*"Include
Включает только модули, соответствующие паттернам:
include:
- "platform/*/*/*" # Только сервис platformПримеры include
# Только production
include:
- "*/prod/*/*"
# Только определенные регионы
include:
- "*/*/eu-central-1/*"
- "*/*/eu-west-1/*"
# Только конкретный сервис
include:
- "billing/*/*/*"Комбинирование фильтров
# Только production, кроме legacy-модулей
include:
- "*/prod/*/*"
exclude:
- "*/prod/*/legacy-*"# Все, кроме тестовых окружений и sandbox
exclude:
- "*/test/*"
- "*/dev/*"
- "*/sandbox/*"Фильтрация через CLI
Фильтры можно переопределить через командную строку:
# Исключить паттерн
terraci generate --exclude "*/test/*"
# Включить только паттерн
terraci generate --include "platform/prod/*/*"
# Комбинирование
terraci generate \
--include "platform/*/*/*" \
--exclude "*/dev/*"CLI-флаги добавляются к фильтрам из конфига.
Фильтрация сабмодулей
# Только сабмодули (глубина 5)
include:
- "*/*/*/*/*"
# Исключить сабмодули
exclude:
- "*/*/*/*/*"
# Конкретный сабмодуль
exclude:
- "platform/prod/eu-central-1/ec2/rabbitmq"Фильтрация по окружению
Фильтрация через флаг --environment:
# Только production
terraci generate --environment prod
# Только staging
terraci generate --environment stageЭквивалентно:
include:
- "*/prod/*/*"Примеры конфигураций
Разделение по окружениям
# production.terraci.yaml
include:
- "*/prod/*/*"
exclude:
- "*/prod/*/deprecated-*"
# staging.terraci.yaml
include:
- "*/stage/*/*"Исключение тестовых модулей
exclude:
- "*/test/*"
- "*/sandbox/*"
- "*/*/*/test-*"
- "*/*/*/mock-*"Только критичная инфраструктура
include:
- "core/*/*/*"
- "*/prod/eu-central-1/*"
exclude:
- "*/*/*/monitoring"Диагностика
Проверка фильтрации
# Показать, какие модули будут обработаны
terraci generate --dry-runОтладка паттернов
# Verbose-вывод показывает совпадения
terraci validate --verboseЧастые ошибки
Паттерн не совпадает
# Неправильно — слишком конкретно
include:
- "platform/prod/eu-central-1/vpc"
# Правильно — используйте glob
include:
- "platform/prod/*/*"Неверная глубина
# Для 4-уровневой структуры
include:
- "*/*/*" # Неправильно — 3 уровня
- "*/*/*/*" # Правильно — 4 уровняКонфликт include/exclude
# Всё исключено — ничего не будет обработано
include:
- "*/prod/*/*"
exclude:
- "*/*/*/*" # Исключает всёБиблиотечные модули
Библиотечные модули (shared modules) — это переиспользуемые Terraform-модули без собственных провайдеров и remote state. Они используются исполняемыми модулями через блок module.
Конфигурация
library_modules:
paths:
- "_modules"
- "shared/modules"Как это работает
При настройке library_modules.paths TerraCi:
- Парсит блоки module в исполняемых модулях для поиска локальных вызовов (
source = "../_modules/kafka") - Отслеживает зависимости от библиотечных модулей в графе зависимостей
- Детектирует изменения в библиотечных модулях при использовании
--changed-only - Включает зависимые модули при изменении библиотечного модуля
Пример структуры
terraform/
├── _modules/ # Библиотечные модули
│ ├── kafka/ # Переиспользуемая конфигурация Kafka
│ │ └── main.tf
│ └── kafka_acl/ # Модуль ACL для Kafka
│ └── main.tf
├── platform/
│ └── production/
│ └── eu-north-1/
│ └── msk/ # Исполняемый модуль, использующий _modules/kafka
│ └── main.tfВ platform/production/eu-north-1/msk/main.tf:
module "kafka" {
source = "../../../../_modules/kafka"
# ...
}
module "kafka_acl" {
source = "../../../../_modules/kafka_acl"
# ...
}Детекция изменений
При изменении _modules/kafka/main.tf:
terraci generate --changed-onlyTerraCi включит platform/production/eu-north-1/msk в пайплайн, потому что он использует библиотечный модуль kafka.
Транзитивные зависимости
Если библиотечный модуль kafka_acl внутри использует модуль kafka, то при изменении kafka все модули, использующие kafka_acl, также будут детектированы как затронутые.
Verbose-вывод
Используйте verbose-режим для отображения детекции библиотечных модулей:
terraci generate --changed-only -vВывод:
Changed library modules: 1
- /project/_modules/kafka
Affected modules (including dependents): 3
- platform/production/eu-north-1/msk
- platform/production/eu-north-1/streaming
- platform/production/eu-west-1/mskПример
Смотрите пример library-modules для полного рабочего примера.