Це історія про автоматизацію 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?