
Лето - это не только сезон отпусков, но и период, когда высокая температура становится дополнительным фактором риска для инфраструктуры. В моём случае жара, вероятно, внесла свой вклад в отказ одной из нод домашнего Proxmox-кластера: купленный несколько лет назад Minisforum UM890 Pro перестал подавать признаки жизни. Вместо замены вышедшей из строя ноды я решил воспользоваться ситуацией и реализовать давно откладываемую задачу - перенести домашнюю лабораторию в Облако.
Для новой инфраструктуры была выбрана площадка Hostkey и выделенный сервер с предустановленным Proxmox VE 9.*. После развертывания хоста я восстановил из резервных копий основные сервисы и получил рабочую среду. Поскольку инфраструктуру фактически приходилось собирать заново, это оказался подходящий момент для следующего шага - перехода к Infrastructure as Code (IaC).
В предыдущем посте я разбирал автоматическое формирование Ansible Inventory на основе данных из Proxmox API. По расписанию скрипт получал актуальное состояние виртуальной инфраструктуры и генерировал inventory, благодаря чему Ansible всегда работал с актуальным списком серверов. Однако это решение закрывало только одну конкретную проблему: inventory соответствовал тому, что уже существует в Proxmox.
При этом оставался более фундаментальный вопрос: где описано то, что вообще должно существовать?
Количество контейнеров, их параметры, выделенные CPU и RAM, диски, сетевые настройки и другие характеристики инфраструктуры по-прежнему существовали преимущественно в моей голове, отдельных командах и истории bash.
Скрипт синхронизации мог ответить на вопрос:
«Что сейчас запущено в Proxmox?»
Но не мог ответить на другой, гораздо более важный:
«Как должна выглядеть инфраструктура и как воспроизвести её с нуля?»
Именно эту задачу я решил закрыть с помощью OpenTofu - open-source форка Terraform.
В этом посте разберу, как я перевёл домашнюю инфраструктуру под управление OpenTofu, связал её с self-hosted GitLab CI/CD и Proxmox, организовал хранение и применение конфигурации через pipeline, а также расскажу о проблемах, с которыми столкнулся в процессе миграции.