Перейти к содержанию

·Naasson Cloud

Вне git-репозитория инструмент ничего не делает

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

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

Это не удобная проверка, которую можно отключить. Это несущее ограничение, из которого выводится всё остальное.

Что оно даёт

Журнал изменений. Каждое применение привязано к коммиту. Вопрос «кто и когда изменил эту машину» имеет ответ, и ответ не зависит от того, включал ли кто-то логирование.

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

Безопасность в команде. Двое не применяют разные версии одного описания, потому что версия — это коммит, а расхождение видно до применения.

Почему именно жёсткое требование

Мягкий вариант — предупреждение вместо отказа — не работает. Предупреждение читают один раз, потом привыкают. Через месяц половина применений идёт с грязным деревом, и журнал изменений превращается в набор записей «применено что-то похожее на этот коммит».

Отказ неудобен ровно в тот момент, когда торопишься. Именно в этот момент он и нужен.

Флаг-исключение всё-таки есть

Есть, и это сознательный компромисс. Бывают ситуации — авария, отладка, разовая проверка, — когда требование мешает по делу.

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

Как ограничение работает на двух треках

Инструмент поддерживает два способа доставки, и требование git одинаково для обоих, а вот стиль сверки разный.

Простой трек — виртуальная машина и контейнеры через compose — работает императивно: инструмент читает закоммиченное состояние и выполняет команды. Никакого непрерывного цикла сверки здесь нет.

Производственный трек — Talos Linux, Cluster API, Helm — работает декларативно: жизненным циклом кластера управляет Cluster API, а всеми нагрузками владеет ArgoCD. Инструмент здесь дирижёр, а не исполнитель.

Одинаковые предварительные проверки, разная механика после них.

Что нельзя коммитить

Обратная сторона правила. Раз в репозиторий уходит описание, туда не должно уходить состояние с секретами.

Файлы состояния Terraform в проекте защищены отдельной проверкой: если такой файл оказался в индексе или в истории, применение и удаление отклоняются с собственным кодом ошибки. Не предупреждением — отказом.

Причина та же, что и с грязным деревом. Файл состояния Terraform содержит достаточно, чтобы им можно было навредить, и попадает он в репозиторий всегда случайно.

Стоимость решения

Инструмент невозможно попробовать «просто в папке». Нужен git init — минимальный, но обязательный шаг.

Мы считаем это правильным входным барьером. Инфраструктура, которую не отслеживает система контроля версий, всё равно превратится в проблему; лучше это обнаружить в первую минуту знакомства, а не через полгода эксплуатации.