Когда конфигов становится много, обычный YAML и шаблоны над JSON начинают работать против вас. Один и тот же блок копируется десять раз, опечатка в имени поля тихо ломает деплой, а окружения незаметно расходятся. Решение — описать конфигурацию как строгий типизированный код на Nickel, языке от Tweag, и уже из него собирать привычный вашим инструментам JSON или YAML.
Как я работаю над задачей:
— Собираю проект на Nickel, где dev, staging и production строятся из общего базового набора значений и точечных переопределений. Наследование через merge заменяет копипасту, а разница между окружениями видна одним взглядом.
— Навешиваю контракты на данные: допустимые регионы и типы машин задаю перечислениями, число реплик и тайм-ауты ограничиваю диапазонами, помечаю обязательные поля, проверяю формат адресов и портов. Неверное значение отбрасывается ещё при сборке, с внятным текстом ошибки.
— Выношу повторяющиеся сущности — сервис, деплоймент, ingress — в параметризованные функции и модули, чтобы правка делалась в одном месте.
— Настраиваю экспорт в чистый JSON или YAML под Kubernetes, Terraform, Nomad, systemd и пайплайны GitHub Actions.
— Перевожу на Nickel то, что у вас уже есть на Jsonnet, Dhall, Helm-values или ручном YAML, и подтверждаю дифом, что итог совпадает с текущим.
— Оставляю тесты, команды для Makefile или justfile, документацию и проверку типов и контрактов прямо в CI на каждый merge request.
Напишите, из чего собираете конфиги сейчас и какой формат нужен на выходе, — я оценю объём работ по существу.
Как я работаю над задачей:
— Собираю проект на Nickel, где dev, staging и production строятся из общего базового набора значений и точечных переопределений. Наследование через merge заменяет копипасту, а разница между окружениями видна одним взглядом.
— Навешиваю контракты на данные: допустимые регионы и типы машин задаю перечислениями, число реплик и тайм-ауты ограничиваю диапазонами, помечаю обязательные поля, проверяю формат адресов и портов. Неверное значение отбрасывается ещё при сборке, с внятным текстом ошибки.
— Выношу повторяющиеся сущности — сервис, деплоймент, ingress — в параметризованные функции и модули, чтобы правка делалась в одном месте.
— Настраиваю экспорт в чистый JSON или YAML под Kubernetes, Terraform, Nomad, systemd и пайплайны GitHub Actions.
— Перевожу на Nickel то, что у вас уже есть на Jsonnet, Dhall, Helm-values или ручном YAML, и подтверждаю дифом, что итог совпадает с текущим.
— Оставляю тесты, команды для Makefile или justfile, документацию и проверку типов и контрактов прямо в CI на каждый merge request.
Напишите, из чего собираете конфиги сейчас и какой формат нужен на выходе, — я оценю объём работ по существу.