Test environment configuration with Ansible.
LVEE 2014
Сегодня существуют десятки различных систем для управления конфигурациями. Среди них есть как проекты, которые получили широкое распространение и хорошо известны (Chef, Puppet, Salt), так и относительно новые системы. О возможностях системы управления конфигурациями Ansible и пойдет речь в данном докладе.
Системы управления конфигурациями хорошо себя зарекомендовали в областях, где требуется управление группами компьютеров, либо где окружение динамично меняется. Хорошими примерами являются облачные вычисления и кластерные системы. Тестирование кластерных файловых систем – это пример динамичной системы, состоящей из группы компьютеров.
Типичная конфигурация, с которой нам приходится иметь дело, представляет собой 6 компьютеров, а ее время жизни составляет 3-5 дней. Постоянно мы используем 5 систем т.е. всего 30 компьютеров. Поскольку процесс тестирования предполагает частую реконфигурацию систем, либо при выходе новых версий ПО, либо для верификации/воспроизведении дефектов, то необходимо этот процесс автоматизировать. Отметим, что при ручной установке сложность и время установки возрастает с ростом количества хостов, и при этом параллельно можно конфигурировать до 10 узлов. Естественным решением является применение автоматизации – либо разработкой собственного средства на каком-то языке программирования, либо с помощью готового приложения. Так нами было выбрано приложение Ansible. Ее главное отличие от аналогичных систем управления конфигурациями – это отсутствие единого сервера для управления и отсутствие специального агента на хостах. Минимально необходимые требования к хосту – сервер SSH и Python 2.6. Минусом такого подхода является то, что скорость выполнения задач зависит от скорости установления соединения с узлом; однако есть дополнительные режимы для ускорения.
Для описания конфигурации систем используются два типа файлов с описанием хостов (inventory) и файлы задач (playbooks).
Inventory-файл является простым INI-файлом, хранит информацию об одном узле, группе узлов, содержит переменные, объединения узлов и группы по заданному шаблону, параметры соединения (порт, имя пользователя, IP адрес). В нашем случае мы создали 5 групп, по группе на тестовое окружение, и эти группы в свою очередь разделили на группы серверов и клиентов. Например, такое разделение позволяет применить индивидуальные настройки на серверах и общие настройки на всю группу.
Второй важный файл – это сборник заданий (playbook). Это тестовый файл в формате YAML, где описаны действия, которые будут применяться к каждому хосту, а также указана группа хостов для конфигурации. Все действия описываются именем задачи и именем модуля с параметрами. Сборник заданий можно организовать в нескольких файлах, что позволяет использовать задания повторно. В заданиях поддерживаются дополнительные элементы – такие как циклы, условные выражения, переменные.
В Ansible существует около сотни доступных модулей. Вот примеры задач, которые успешно решаются с их помощью:
- установка публичных ключей;
- заполнение файлов конфигурации;
- копирование вспомогательных скриптов для тестирования.
Иногда стандартных модулей недостаточно. Пример – конфигурация сетевых интерфейсов. По скольку в Ansible заложены возможности по дополнению функционала системы с помощью интерфейса модулей, плагинов, либо скриптов, то можно использовать различные варианты для решения этой задачи. Так изначально использовался написанный ранее bash-скрипт. Позже по мере изучения возможностей приложения эта задача была реализована нами с использованием циклов, модуля templates и переменных узлов. Также эту задачу можно реализовать в виде дополнительного модуля на любом языке программирования. Но в нашем случае предпочтение отдается Python, т.к. это позволяет использовать стандартную библиотеку Ansible, которая содержит функции для написания модулей.
В итоге за счет использования системы освободилось дополнительное время для других задач, а сама система – проста для внедрения, поддерживает достаточно большое кол-во реализованных функций, и в случае необходимости существуют простые способы добавления новых.
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license
Back