Це історія про автоматизацію Proxmox через Terraform — про те, як відмова від клікання по майстрах перетворила тригодинну рутину на п'ятнадцять хвилин коду. Той самий результат. Удесятеро швидше. Нуль людських помилок. І дарма я не зробив цього на пару років раніше.
Третя VM за тиждень
Це була третя віртуалка, яку я піднімав того тижня. Три години клікання по майстру Proxmox — сторедж сюди, мережа туди, ISO, шаблон, розмір диска, і так щоразу той самий танець.
А далі найненависніше: копіювати IP-адреси зі спільної таблиці, яку ніхто не оновлював уже два місяці. Налаштовувати мережу руками. Звірятися з попередньою віртуалкою і молитися, щоб ця збіглася.
Не збігалася. Ніколи. Жодна зібрана руками VM не виходила однаковою. Кожна — сніжинка, унікальна саме в тих місцях, про які я дізнаюся лише коли щось відвалиться о другій ночі, і я дифатиму конфіги, намагаючись згадати, де саме промахнувся пальцем три тижні тому.
Момент, коли мене переклинило
Десь на другій годині тієї третьої віртуалки я перестав клікати. Відкрив термінал. Почав писати Terraform.
Не тому що мав план. А тому що не міг більше робити це руками ще один раз. Є особливий сорт втоми — коли повторюєш задачу, про яку точно знаєш, що її має робити машина. Ось у цю стіну я і вперся.
За два тижні весь ручний процес зник.
Стек, який замінив клікання
Заміною був не один інструмент, а три — кожен робить те, в чому справді хороший:
- Terraform напряму спілкується з Proxmox API: провіжинить і налаштовує мережу. Це той шар, що вбив майстра. Ти описуєш VM — Terraform її створює.
- Ansible автоматично робить усе після провіжинінгу: конфігурацію і security hardening. Більше не треба заходити по SSH і щось докручувати руками.
- Python відповідає за керування шаблонами й оркестрацію — той клей, що зв'язує життєвий цикл шаблонів і всі шорсткі краї.
Нічого екзотичного. У цьому й суть. Нудний, добре задокументований infrastructure-as-code — а нудне це саме те, що має тримати машини, на яких крутиться все інше.
Як це працює тепер
Повсякдення стало майже буденним:
- Описуєш параметри VM у YAML-файлі — CPU, пам'ять, диск, мережа, усе.
- Запускаєш
terraform planі читаєш рівно те, що буде створено. Жодних сюрпризів, жодного «ну давай подивимось, що вийде». terraform apply.- Далі підхоплює Ansible. Руки прибрані.
Описав, що хочеш. Отримав те, що описав. Ось і весь цикл.
Що реально змінилося
Головна цифра — та сама, заради якої все це й захотілося написати: три години перетворилися на п'ятнадцять хвилин на VM. Але зекономлений час — найнецікавіше тут.
- Усі VM ідентичні. Жодних сніжинок. Коли все зібрано з одного коду, «на тій машині працює, на цій ні» перестає бути класом проблем.
- Керування IP автоматизоване. Таблиця мертва. Адресами займається код, а не той, хто згадав оновити спільний файл.
- Усе живе в Git. Новий інженер клонує репозиторій і першого ж дня розуміє, як усе влаштовано. Жодного tribal knowledge. Жодної документації, що протухла пів року тому. Жодної археології по старих тредах у Slack.
Ось це останнє — тиха, але головна перемога. Ручна інфраструктура не просто повільна, вона пастка знань. Той, хто її зібрав, — єдиний, хто знає, чому вона така; і щойно він іде, ти реверс-інженериш власні системи.
Про що ніхто не попереджає
Штука з ручною роботою ось у чому: ти не помічаєш, скільки життя вона з'їдає, поки не перестанеш її робити. Поки ти всередині, три години клікання відчуваються як «ну це просто робота». І лише з іншого боку — дивлячись, як terraform apply завершується за той час, що раніше йшов на налаштування мережі однієї машини, — озираєшся і не розумієш, навіщо терпів це так довго.
Звідси чесне правило, до якого я прийшов: якщо ти піднімаєш щось руками більше двох разів — це не про ретельність. Це про терпіння до проблеми, яка твого терпіння не заслуговує.
А що ти досі збираєш руками з того, що міг би робити Terraform?