Тестирование ролей Ansible: практическое применение

Ansible — это мощный инструмент для управления конфигурацией, оркестровки, непрерывной доставки и т . д . Как разработчик программного обеспечения, я использовал Ansible в качестве основного механизма для выполнения повторяющихся шагов в удобной для совместного использования и понятной для человека форме в течение последних двух лет. Мягко говоря, я был озадачен, когда коллега указал мне на Molecule .

Выйдя из мира запуска плейбука на целевых тестовых системах, чтобы посмотреть, что произойдет, затем запустить виртуальную машину, бродячую или докерную систему, а затем откатить ошибки при разработке роли или плейбука; Я нашел этот инструмент очень интригующим. Molecule позволяет вам не только тестировать роли, которые вы создаете, для таких вещей, как синтаксис, но также позволяет повторять настройку и демонтаж систем для тестирования. Основы Molecule описаны в следующей статье с сайта opensource.com . Достаточно беглого взгляда на вводную статью и документацию по Molecule, затем мы можем начать с того, как я применил это к практическому варианту использования, а также с некоторыми советами/рекомендациями о том, как получить максимальную отдачу отМолекула .

Пример использования

В моем текущем проекте мы извлекаем данные из Kubernetes ( Openshift ), чтобы определить стоимость запуска кластера. Мы используем метрику оператора , которая извлекает метрики из Prometheus для сбора информации об использовании. Мы создали проект Korekuta , который использует Ansible для выполнения двух задач:

(1) настроить отчеты об измерениях оператора и сохранить данные конфигурации

(2) собирать данные из API измерения оператора и отправлять их в облачное хранилище для обработки

Для этого были созданы две роли ( настройка и сбор), и в плейбуке используются теги для запуска каждой роли.

Настройка молекулы

Как указано во вводной статье, Molecule работает с различными драйверами, от Docker до Vagrant, Virtualbox и других. Прелесть процесса настройки в том, что он использует Ansible , с которым вы явно знакомы, для подготовки тестовой системы. Когда вы создаете роль для тестирования, вы можете добавить файл prepare.yml , который действует как сборник сценариев для настройки тестовой системы. Файл prepare.yml находится в каталоге <role>/molecule/default/ и запускается этапом Prepare процесса тестирования Molecule .

Для роли установки Korekuta шаг « Подготовка » выполняет следующие действия:

  1. Устанавливает клиентские инструменты Openshift, используя существующую роль из Ansible Galaxy .
  2. Создание наличия инструмента командной строки
  3. Создание файла в известном месте для использования в качестве ввода дополнительных переменных
  4. Создание простого веб-сервера для ответа ожидаемыми полезными нагрузками

Интеграция Molecule с Ansible Galaxy позволяет вам использовать все замечательные роли, созданные ранее другими. К сожалению, я обнаружил, что документации по этой функции не хватает, поэтому в качестве примера вы можете увидеть использование роли ниже:

Выполнение роли из Ansible Galaxy

Чтобы использовать эту роль, вы должны указать зависимость вашей роли от нее, добавив файл requirements.yml в каталог <role>/molecule/default/ . Для Korekuta файл requirements.yml выглядит следующим образом :

Требования для использования роли Ansible Galaxy.

С помощью этих небольших шагов вы можете воспользоваться преимуществами динамичной экосистемы Ansible Galaxy , чтобы упростить настройку тестовой системы.

Выполнение молекулярного теста

Molecule снова использует область, с которой знаком пользователь, используя «исполнитель тестов» для роли в виде учебника. В разделе выше я упомянул каталог <role>/molecule/default/ , однако каталог по умолчанию — это всего лишь один тестовый пример, поэтому, чтобы обобщить его на самом деле <role>/molecule/<test_case>/ ; и у каждого из них есть playbook.yml , который будет выполняться на этапе Converge . С помощью этой конструкции вы можете настроить различные потоки тестирования для своей роли, а также специализированную настройку, как упоминалось в предыдущем разделе.

Playbook.yml для роли установки Korekuta довольно прост, однако его выполнение во время выполнения зависит от того, введет ли пользователь дополнительные переменные в командную строку, используя механизм Ansible « -e VARIABLE=VALUE» . В целях тестирования мы можем использовать параметр vars в книге воспроизведения , чтобы предоставить эти входные значения, а затем иметь несколько тестовых случаев для изменения входных данных с помощью разных книг воспроизведения, как показано в примере.

Как упоминалось во вступительной статье, Molecule позволяет проверить ожидаемые результаты тестового примера и настроить непрерывный процесс интеграции. Поскольку они достаточно ясно освещены между статьей и документацией, я просто приведу ссылки на эти элементы в Korekuta для полноты картины.

Синопсис

В этой статье мы рассмотрели, как можно протестировать роли Ansible с помощью Molecule вместе с некоторыми высокоуровневыми ресурсами. Затем мы углубились в проект, использующий Molecule , и обсудили, как работают настройка и выполнение тестов, а также включили советы по использованию ролей Ansible Galaxy и управлению потоками дополнительных переменных с несколькими тестовыми примерами. Надеемся, что ресурс, связанный с этим практическим применением тестирования роли Ansible , будет вам полезен.

Удачной автоматизации!

Перейти к верхней панели