Клиент развивает собственную веб-платформу для работы с виртуальными машинами. У него была собственная сборка VirtualBox на Windows-сервере, уже было настроено большое количество виртуальных машин. И он столкнулся с проблемой масштабирования. Оператор вручную создавал и настраивал виртуальные машины: запускал VirtualBox под Windows, проходил этапы создания машины, указывал параметры и проверял результат. Каждая операция занимала время и зависела от его внимательности.
Веб-платформа не имела механизма для передачи команд VirtualBox, поэтому не могла запускать этот сценарий без участия оператора.
У VirtualBox есть штатные инструменты программного управления, включая командную строку ?и программные интерфейсы. Но они не закрывали весь сценарий заказчика. Готового решения под существующую архитектуру заказчика не было, поэтому мы разработали собственную API-обертку, которая перенесла управление виртуальными машинами из VirtualBox ?в веб-платформу.
Мы сделали отдельный сервис между веб-платформой и Windows-приложением, который связывает эти инструменты с веб-платформой и берет на себя запуск управляющего ПО, проверку лицензии, выполнение операций, передачу статусов и диагностику ошибок.
Через API можно создавать и редактировать виртуальные машины, запускать и останавливать их, а также получать информацию об их текущем состоянии. Сервис принимает команды через REST API и передает их Python-сценариям, которые выполняют необходимые операции в графическом интерфейсе VirtualBox.
При запуске сервера сервис автоматически запускает управляющее ПО и проверяет его лицензию. ?Так рабочее окружение готово к выполнению команд еще до того, как веб-платформа начнет отправлять запросы.

В чем сложность автоматизировать VirtualBox через графический интерфейс Windows: простая последовательность кликов не подходит, поскольку приложение может не успеть открыть нужное окно, завершить загрузку, показать дополнительный диалог или предупреждение. И во время выполнения сценария также может измениться состояние виртуальной машины или завершиться не та операция, которую система ожидает.
Поэтому мы сделали так, чтобы система ориентировалась на фактическое состояние приложения, а не просто воспроизводила заранее заданную последовательность кликов. Сценарии находят нужные элементы интерфейса, ожидают их появления и проверяют состояние окон и доступность нужных кнопок перед следующим действием. Если VirtualBox показывает дополнительное окно или предупреждение, сценарий учитывает это состояние и реагирует соответствующим образом.
Оператору больше не нужно вручную запускать VirtualBox и проходить каждый этап операции: веб-платформа запускает команды через API и получает результат их выполнения.