В одном из наших проектов нам нужно было подготовить Golden Images для нужд нашего заказчика, которые затем были установлены в различных средах. Перед этим также необходимо было убедиться в выполнении всех заявленных требований и проверить это на тестовых ec2-инстансах. В этой статье я хотел бы немного рассказать вам о том, как вы можете протестировать свои золотые образы на AWS с помощью Molecule Framework, TestInfra и Python.

Установка и подготовка

Мы использовали Molecule framework и все дальнейшие шаги описаны в соответствии с этой информацией.

Для этого я подготовил бродячий файл (поставщик virtualbox) со всеми необходимыми пакетами для тестирования нашего Golden Image с помощью Молекулы и Молекулы-EC2. Вы можете просто добавить свой ключ RSA или отредактировать его по своему усмотрению (к сожалению, в виде изображений):

Вы также должны установить vagrant и virtualbox, если это необходимо, создать и сохранить файл vagrant в определенной папке, открыть терминал внутри этой папки и выполнить команду:

vagrant up

Как только виртуальная машина будет запущена, вы можете создать новую роль или просто установить Molecule framework для существующей роли.

Чтобы создать новую роль, выполните команду:

molecule init role -d ec2 your-role-name

Это создаст новую папку your-role-name, содержащую сгенерированную роль, как если бы вы делали это с помощью команды инициализации ansible-galaxy.

Он также будет содержать папку molecule со сценарием по умолчанию с использованием драйвера ec2 (с использованием коллекции ansible community.aws.ec2_instance).

Чтобы создать сценарий по умолчанию с драйвером ec2 в папке molecule, расположенной в текущем рабочем каталоге, запустите:

molecule init scenario -d ec2

Сделав это, вы можете найти файлы ниже внутри папки molecule:

converge.yml — используется для преобразования состояния экземпляров в реальное состояние, заявленное в реальных тестируемых ролях,

create.yml — один из основных файлов, он используется для создания ресурсов для тестирования вашей роли, вы должны изменить его перед тестированием (пожалуйста, см. рабочий пример ниже):

destroy.yml — еще один основной файл, он используется для удаления ресурсов для тестирования вашей роли, требуется модификация перед тестированием (пожалуйста, найдите рабочий пример ниже):

INSTALL.rst — обычно содержит информацию об установке зависимостей скрипта,

molecule.yml — последний из основных файлов, содержит информацию о драйвере (ec2, docker и т. д.), платформах, провайдере и верификаторе (ansible, testinfra и т. д.), его следует модифицировать перед test, укажите image_owner, image_name (ваш Golden Image), instance_type и vpc_subnet_id:

prepare.yml — подготовка экземпляра, т.е. установлен питон,

verify.yml — для запуска тестов полученной конфигурации с помощью ansible, testinfra, goss, inspec и т. д.

Следующим шагом является изменение файла meta/main.yml внутри вашей роли ansible (ограничение ansible galaxy), чтобы избежать некоторых ошибок. Вы должны определить:

имя_роли: например. моя_тестовая_роль

автор: напр. моя_тестовая_роль

описание: например. моя_тестовая_роль

Последней частью подготовки является создание пользователя IAM с программным доступом, настройка aws cli (настройка aws или просто экспорт вашего ключа доступа, секретного ключа и региона в терминал) и дополнительный двойной экспорт вашего региона с помощью команды ниже (ошибка molecule-ec2 ):

export EC2_REGION=your_region

Сделав это, просто запустите команду:

molecule test

и тест по умолчанию должен пройти успешно.

Тестовая часть

В моем примере Testinfra используется для создания тестов. Вы должны определить его внутри molecule.yml, добавить папку tests с файлом test_default.py в папку вашей молекулы:

Тесты написаны на Python и находятся в файле molecule/default/tests/test_default.py.

Имена тестовых процедур должны начинаться с «test_».

Например, если вы хотите убедиться, что определенную команду можно запустить, проверить результат ее выполнения и вывод в консоль, то это можно сделать так:

Проверка того, что служба запущена, выглядит так:

Наличие файлов и их содержимое можно проверить так:

И так мы можем убедиться, что ssm-agent установлен и его версия начинается с 3:

Знание такого популярного языка программирования, как Python, позволит вам выполнить практически любую задачу, а подготовка и выполнение таких тестов Golden Image перед его развертыванием в вашей инфраструктуре позволит избежать проблем и головной боли, если у вас десятки, а то и сотни инстансов.

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.