В одном из наших проектов нам нужно было подготовить 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.