В нашем блоге на Хабре мы много рассказываем о внедрении подходов DevOps и разработанных нами инструментах автоматизации разработки и тестирования. Сегодня речь пойдет о том, как мы решали проблему взаимодействия с VMware vSphere.
Немного истории
В vSphere работают все наши виртуальные машины — как сборочные, так и тестовые серверы.
Пару лет назад до появления нашей собственной системы Continuous Integration большая часть наших сборок была перенесена на инструмент TeamCity. На тот момент у нас не было тестовых и деплойных конфигураций, однако необходимость их развития становилась все более явной.
На середину 2014 года нам было известно два решения для автоматизации работы с виртуальными машинами: использование собственного API VMware для работы с vSphere (библиотека VIX API) и применение библиотеки pysphere. У каждого из этих инструментов были недостатки.
У VIX API был слишком высокий для нас порог вхождения:
- Инструмент представлял собой набор сложных и плохо документированных C-библиотек.
- Всю интеграцию с нашими CI-системами пришлось бы писать самостоятельно на C.
Библиотека pysphere вообще была фактически недокументированной и с рядом проблем:
- инструмент написан под Python 2.7;
- отсутствовал интерфейс командной строки;
- продукт представлял собой набор разрозненных классов, хаотично раскиданных по скриптам пакета;
- проект только развивался и содержал множество багов.
Однако если сравнивать pysphere с VIX API, то у первого были и свои преимущества:
- Он работает гораздо быстрее за счет использования http rest api для доступа к функциям vSphere.
- Экспертиза в Python у нас в компании гораздо выше, так что порог вхождения для использования этого инструмента был ниже.
- Отзывы о нашей самописной библиотеке PT.VIX поверх VIX API не выдерживали никакой критики в плане поддержки и надежности ее работы.
Поэтому было решено использовать эту библиотеку и на ее базе создать собственное решение.
Проект vSphereTools
Прежде чем начать программировать, мы составили требования к набору инструментов автоматизации.
- продукт должен был поддерживать работу из консоли с широким набором команд;
- иметь понятное API для возможности его импорта как обычной python-библиотеки;
- быть встроенным в TeamCity в качестве метараннеров, доступных для выбора в шагах конфигураций.
Концептуальная модель взаимодействия vSphereTools с самой «Сферой» представлена ниже:
Все довольно просто: инициатор, которым может быть пользователь или скрипт, отправляет команды, полученные через командную строку, инструменту vSphereTools, который переправляет данные библиотеке pysphere. Дальше запрос попадает в vSphere, где обрабатывается и отправляется виртуальной машине, которая выдает то, что нам нужно («стейты», атрибуты и т.п.)
Требования к окружению для vSphereTools были минимальны:
- нужен служебный пользователь для доступа к vSphere;
- с машины, на которой запускается vSphereTools, должен быть доступен сервис vcenter, а также ESX, на котором работает целевая виртуальная машина.
- на целевой «виртуалке» должны быть также установлены инструменты VMware Tools;
- на машине, на которой запускаются vSphereTools, должен быть установлен Python 2* версий 2.7 или старше.
Полная документация с примерами доступна в открытом сообществе DevOpsHQ. В итоге скрипты vSphereTools реализуют множество функций от старта и остановки виртуальных машин до копирования локального файла внутрь нужной виртуалки или запуска на ней конкретной программы.
В настоящий момент метараннеры и скрипты vSphereTools используются при разработке и тестировании практических всех крупных продуктов Positive Technologies — например, MaxPatrol SIEM, PT Application Firewall и Application Inspector и во многих других проектах.
Ограничения и возможные доработки
Как у любого инструмента у нашего продукта vSphereTools есть и свои ограничения:
- Последняя доступная в индексе версия pysphere 0.1.8, а именно она лежит в основе vSphereTools.
- Новые методы для vSphereTools приходится реализовывать только силами DevOps-отдела компании.
- Новые версии VMware vSphere возможно не будут поддерживать старый API.
- В настоящий момент наши скрипты работают только с Python 2* (2.7 и выше).
Поэтому мы планируем и ряд доработок. Например, хотим переписать vSphereTools на VMware vCloud Suite SDK for Python for vSphere 6.0. Документация этого инструмента уже доступна, также есть и python-api для него — библиотека pyvmomi.
P. S. Рассказ о проекте vSphereTools был представлен в рамках DevOps-митапа, который состоялся осенью в Москве.
Видео:
Слайды:
По ссылке представлены презентации 16 докладов, представленных в ходе мероприятия. Все презентации и видео выступлений будут добавлены в таблицу в конце этого топика-анонса.
Автор: Тимур Гильмуллин
P. P. S. Напоминаем, что совсем скоро при поддержке Positive Technologies в Москве пройдет курс по asyncio+aiohttp от Core-разработчика Python Андрея Светлова.
Мы хотим предложить один бесплатный билет на семинар автору лучшего вопроса для Андрея — вопрос выберет он сам и ответит на него в ходе занятия. Присылайте свои вопросы по адресу: asyncio2016@ptsecurity.com.