Это история про автоматизацию Proxmox через Terraform — про то, как отказ от кликанья по мастерам превратил трёхчасовую рутину в пятнадцать минут кода. Тот же результат. В десять раз быстрее. Ноль человеческих ошибок. И зря я не сделал это на пару лет раньше.

Третья VM за неделю

Это была третья виртуалка, которую я поднимал за ту неделю. Три часа кликанья по мастеру Proxmox — сторедж сюда, сеть туда, ISO, шаблон, размер диска, и так каждый раз один и тот же танец.

А дальше самое ненавистное: копировать IP-адреса из общей таблицы, которую никто не обновлял уже два месяца. Настраивать сеть руками. Сверяться с предыдущей виртуалкой и молиться, чтобы эта совпала.

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

Момент, когда меня переклинило

Где-то на втором часу этой третьей виртуалки я перестал кликать. Открыл терминал. Начал писать Terraform.

Не потому что был план. А потому что не мог больше делать это руками ещё один раз. Есть особый сорт усталости — когда повторяешь задачу, про которую точно знаешь, что её должна делать машина. Вот в эту стену я и упёрся.

Через две недели весь ручной процесс исчез.

Стек, который заменил кликанье

Заменой был не один инструмент, а три — каждый делает то, в чём реально хорош:

  • Terraform напрямую общается с Proxmox API: провижинит и настраивает сеть. Это тот слой, который убил мастера. Ты описываешь VM — Terraform её создаёт.
  • Ansible автоматически делает всё после провижининга: конфигурацию и security hardening. Больше не надо заходить по SSH и что-то докручивать руками.
  • Python отвечает за управление шаблонами и оркестрацию — тот клей, что связывает жизненный цикл шаблонов и все шероховатые края.

Ничего экзотического. В этом и суть. Скучный, хорошо задокументированный infrastructure-as-code — а скучное это ровно то, что должно держать машины, на которых крутится всё остальное.

Как это работает теперь

Повседневность стала почти будничной:

  1. Описываешь параметры VM в YAML-файле — CPU, память, диск, сеть, всё.
  2. Запускаешь terraform plan и читаешь ровно то, что будет создано. Никаких сюрпризов, никакого «ну давай посмотрим, что выйдет».
  3. terraform apply.
  4. Дальше подхватывает Ansible. Руки убраны.

Описал, что хочешь. Получил то, что описал. Вот и весь цикл.

Что реально изменилось

Главная цифра — та самая, ради которой всё это и захотелось написать: три часа превратились в пятнадцать минут на VM. Но сэкономленное время — самое неинтересное здесь.

  • Все VM идентичны. Никаких снежинок. Когда всё собрано из одного кода, «на той машине работает, на этой нет» перестаёт быть классом проблем.
  • Управление IP автоматизировано. Таблица мертва. Адресами занимается код, а не тот, кто вспомнил обновить общий файл.
  • Всё живёт в Git. Новый инженер клонирует репозиторий и в первый же день понимает, как всё устроено. Никакого tribal knowledge. Никакой документации, протухшей полгода назад. Никакой археологии по старым тредам в Slack.

Вот последнее — тихая, но главная победа. Ручная инфраструктура не просто медленная, она ловушка знаний. Тот, кто её собрал, — единственный, кто знает, почему она такая; и как только он уходит, ты реверс-инженеришь собственные системы.

О чём никто не предупреждает

Штука с ручной работой вот в чём: ты не замечаешь, сколько жизни она сжирает, пока не перестанешь её делать. Пока ты внутри, три часа кликанья ощущаются как «ну это просто работа». И только с другой стороны — глядя, как terraform apply завершается за то время, что раньше уходило на настройку сети одной машины, — оглядываешься и не понимаешь, зачем терпел это так долго.

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

А что ты до сих пор собираешь руками из того, что мог бы делать Terraform?