Обзор
maxicfg читает конфигурационные файлы, проверяет их по схеме и сравнивает между окружениями. Это один статический бинарник без зависимостей времени выполнения.
Основные понятия
Источники
Источник — любой файл, который maxicfg умеет прочитать. Поддерживаются YAML,
TOML, JSON, dotenv и INI. Формат определяется по расширению; если расширение
вводит в заблуждение, его можно задать явно флагом --format.
Схема
Схема описывает, какие ключи допустимы, какие обязательны и какого типа должно быть значение. Схемы сами написаны на YAML — отдельный язык описания учить не нужно.
keys:
database.host: { type: string, required: true }
database.port: { type: int, default: 5432, min: 1, max: 65535 }
database.pool_size: { type: int, default: 10 }
logging.level: { type: enum, values: [debug, info, warn, error] }
features.*: { type: bool }
Профили
Профиль — именованная группа источников, обычно по одному на окружение. Профили позволяют выполнить одну команду для всех окружений сразу, не оборачивая вызов в цикл.
Типичный процесс
- Описать схемой конфигурацию, которую ожидает сервис.
- Запускать
maxicfg lintв CI, чтобы невалидные конфиги не попадали в основную ветку. - Запускать
maxicfg diffперед релизом и просматривать изменения. - Запускать
maxicfg scan, чтобы убедиться, что секреты не утекли в репозиторий.
Чего он не делает
Область задач намеренно узкая. maxicfg не управляет секретами, не ходит в удалённые хранилища конфигурации, ничего не деплоит и не работает как демон. Он читает файлы, печатает найденное и выставляет код возврата.
Если нужна динамическая конфигурация во время работы приложения — используйте сервис конфигурации. maxicfg занимается файлами, которые лежат в репозитории.
Что дальше
- Установить maxicfg локально или в CI
- Написать первую схему
- Посмотреть справочник команд