maxicfg

Обзор

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 }

Профили

Профиль — именованная группа источников, обычно по одному на окружение. Профили позволяют выполнить одну команду для всех окружений сразу, не оборачивая вызов в цикл.

Типичный процесс

  1. Описать схемой конфигурацию, которую ожидает сервис.
  2. Запускать maxicfg lint в CI, чтобы невалидные конфиги не попадали в основную ветку.
  3. Запускать maxicfg diff перед релизом и просматривать изменения.
  4. Запускать maxicfg scan, чтобы убедиться, что секреты не утекли в репозиторий.

Чего он не делает

Область задач намеренно узкая. maxicfg не управляет секретами, не ходит в удалённые хранилища конфигурации, ничего не деплоит и не работает как демон. Он читает файлы, печатает найденное и выставляет код возврата.

Если нужна динамическая конфигурация во время работы приложения — используйте сервис конфигурации. maxicfg занимается файлами, которые лежат в репозитории.

Что дальше