VEBA и Python

Уже пару лет Уильям Лам развивает проект под названием vCenter Event Broker Appliance (VEBA), позволяющий выполнять скрипт при наступлении какого-либо события у “Event Provider”. В качестве Event Provider может выступать как vCenter, так и другие системы. В текущей версии 0.7.1 VEBA умеет выступать даже в качестве Webhook-системы для других систем. В качестве языков поддерживаются Python, Go и PowerShell.

Развертывание апплайнса выполняется стандартно. Из обязательных настроек тут только указание адреса vCenter (если вам интересен он), логин и пароль на чтение (для считывания событий). Опционально можно указать учетную запись для регистрации веб-плагина управления к VEBA, но у меня это не взлетело 🙂

Имеется достаточно много примеров – лучше брать примеры на Knative, так как OpenFaas будет удален в релизе 0.8.0.

Я опишу написание своей функции для python. Тем не менее, вы можете воспользоваться также PowerShell или Golang.

Для того, чтобы сделать свою функцию, скопируйте файлы из каталога с примером и измените следующие:

  • function.yaml (содержит названия событий, реакцией на которые будет вызов контейнера со скриптом handler.py. Список событий доступен тут. Если вы будете реагировать на несколько событий, необходимо создать в файле несколько “Triggers”, с разным названием и содержимым атрибута Subject. Пример можете посмотреть тут. Также вам необходимо будет опубликовать свой Docker-образ через Docker push и указать его название);
  • handler.py (содержит логику вашей функции. При использовании данных из события обязательно посмотрите на тестовое событие для того, чтобы понять – как получить доступ к полям события. Обязательно почитайте рекомендации к разработке своих функций);
  • secret.json (содержит всю конфиденциальную информацию, которую нежелательно сохранять в скрипте handler.py).

Сейчас я приведу пример функции с handler.py, которая при создании ВМ в vSphere делает следующее:

  1. из события берется имя ВМ и кластера;
  2. в Netbox по имени кластера ищется его ID;
  3. создается ВМ в Netbox на кластере.

Подразумевается, что в Netbox требуемый кластер уже создан, иначе скрипт необходимо доработать.

После создания своего скрипта handler.py вам понадобится пересобрать контейнер с ним. Примерная инструкция тут, я же распишу ее для чайников 🙂

Контейнер можно разместить, например, на Docker. Для этого вы регистрируетесь на Docker.

Сборка

Затем авторизуетесь из VEBA, выполнив

Устанавливаете туда утилиту pack

Собираете локально контейнер (пример образа – vmind/super_script:1.0):

 

Тесты

Запускаете контейнер в SSH-сессии:

Редактируете файл testevent.json с тестовым событием в подкаталоге ./test таким образом, чтобы он содержал событие, на которое вам нужна реакция.

Поднимаете вторую SSH-сессию до VEBA-апплайнса, переходите в каталог с функцией и выполняете отправку тестового события в контейнер:

Если вы все сделали правильно, ваш контейнер выполнит скрипт handler.py.

После этого можно возвращаться в первую SSH- сессию с docker run и нажимать там Ctrl+C для прекращения работы контейнера.

Финиш

Публикуете свой контейнер в публичный репозиторий:

Создаете “секрет” в kubernetes, который будет содержать адрес Netbox-сервера и токен доступа к нему.

Указываете в function.yaml название вашего образа в Docker (<docker-username>/<script_folder_name>:version. Вместо версии можете указать :latest для того, чтобы всегда брался самый свежий контейнер).

По желанию меняете в нем же минимальное количество Ready-подов и максимальное – которое будет выполнять Kunbernetes при реакции на событие.

 

Теперь собираете приложение Kubernetes, в котором будет выполняться ваш контейнер, в котором лежит ваш скрипт.

Работать это будет в идеологии “Serverless”: контейнер будет запускаться при появлении вашего события, скрипт handler.py будет его обрабатывать, после чего контейнер будет убиваться!

 

Вжух

Поздравляю, вы уже немного девопс. Докер, кубернетис, питон и все вот это вот 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *