Как создавать Ansible-роли и использовать их в Playbook
Ansible — это инструмент управления конфигурацией и оркестровкой с открытым исходным кодом, который упрощает автоматизацию ИТ-задач в многоуровневой ИТ-среде. С помощью одной команды вы можете настроить несколько серверов и развернуть приложения без входа на каждый из серверов и выполнения настройки самостоятельно. При этом Ansible упрощает задачи, которые в противном случае были бы утомительными и трудоемкими.
С увеличением количества файлов playbook, выполняющих различные задачи автоматизации, все может стать немного сложнее. И вот тут-то и появляются роли Ansible.
Что такое роль Ansible?
Ансибл-роль — это концепция в Ansible, которая имеет дело с идеями, а не с событиями. По сути, роль — это уровень абстракции, используемый для упрощения написания файлов playbook. Роль обеспечивает основу для многократно используемых компонентов, таких как переменные, модули, задачи и факты, которые могут быть загружены в файл Playbook.
Практическое применение
Чтобы лучше понять, как используются роли, давайте рассмотрим сценарий, в котором у вас есть 8 задач, которые нужно выполнить на 2 удаленных узлах. Один из подходов — определить все задачи, которые будут выполняться на удаленных хостах, в одном файле playbook. Однако это утомительно и, скорее всего, усложнит сценарий. Лучшим подходом было бы создать 8 отдельных ролей, при этом каждая роль будет выполнять одну задачу, а затем вызывать эти роли в файле ansible-playbook .
Одним из основных преимуществ использования ролей является то, что каждая роль не зависит от другой. Выполнение одной роли не зависит от выполнения другой роли. Кроме того, роли можно изменять и повторно использовать, что устраняет необходимость переписывать пьесы и задачи в файле Playbook.
Итак, предположим, что вы хотите создать файл playbook для установки стека LAMP на сервере Debian. Лучше всего начать с создания трех отдельных ролей, каждая из которых будет устанавливать Apache, MariaDB и PHP соответственно на удаленный хост. Затем напишите playbook и вызовите роли в файле playbook. Предположим, у вас есть второй сервер Debian, который вам нужен для установки Drupal CMS. Вместо того, чтобы заново переписывать роли, вы можете просто повторно использовать 3 роли, которые вы создали ранее, и добавить другие роли для установки Drupal.
Вы уловили дрейф?
Давайте теперь посмотрим, как вы можете создавать роли Ansible.
Как создавать роли в Ansible
Чтобы создать доступные роли с нуля, запустите команду ansible galaxy, пример показан ниже:
$ ansible-galaxy init role-name
Например, чтобы создать роль с именем my-role, вызовите команду.
$ ansible-galaxy init my-role
На экране выше команда создает каталог my-role . Этот ролевой каталог по умолчанию содержит следующие каталоги или папки.
- ‘defaults’ папка – Это содержит переменную по умолчанию , которые будут использоваться в роли.
- ‘files’ папка – Содержит файлы , которые могут быть развернуты с помощью роли.
- ‘handlers’ папка – хранит обработчики, которые могут использоваться этой ролью.
- ‘meta’ папка – содержит файлы, которые устанавливают зависимости ролей.
- ‘tasks’ папка – содержит файл YAML, в котором описаны задачи для самой роли. Обычно это файл main.yml.
- ‘templates’ папка – содержит файлы шаблонов, которые можно изменить и назначить для настраиваемого удаленного хоста.
- ‘tests’ папка – интегрирует тестирование с файлами Ansible playbook.
- ‘vars’ папка – содержит переменные, которые будут использоваться ролью. Вы можете определить их в файле playbook, но рекомендуется определять их в этом каталоге.
Чтобы просмотреть структуру каталогов ролей, выполните команду tree с указанием имени роли.
$ tree <role-name>
Теперь, для демонстрации, мы собираемся создать три следующие роли:
- prerequisites role – Устанавливает git
- mongodb role – ядро базы данных MongoDB Установлено
- apache role – Устанавливает веб — сервер Apache
Итак, используя тот же синтаксис, который мы использовали ранее, мы собираемся создать роли следующим образом:
$ sudo ansible-galaxy init prerequisites $ sudo ansible-galaxy init mongodb $ sudo ansible-galaxy init apache
Следующим шагом является определение каждой созданной вами роли. Для этого вам необходимо отредактировать файл main.yml, расположенный в папке «tasks» для каждой роли.
role —> tasks —> main.yml
Например, чтобы изменить роль предварительных требований, выполните следующие действия:
$ cd prerequisites/tasks/
Затем отредактируйте файл main.yml.
$ sudo vim main.yml
Роль для установки git определяется следующим образом:
- name: Install git apt: name: git state: present update_cache: yes
Для MongoDB у нас есть 2 задачи. Установка MongoDB и запуск демона Mongod.
- name: Install MongoDB apt: name: mongodb state: present update_cache: yes - name: Start Mongod daemon shell: "mongod &"
И, наконец, для веб-сервера Apache:
- name: install Apache web server apt: name=apache2 state=present update_cache=yes
Наконец, мы собираемся создать файл playbook с именем stack.yml и называть роли, как показано.
--- - hosts: all become: yes roles: - prerequisites - mongodb - apache
Как видите, файл playbook выглядит довольно просто по сравнению с определением каждой задачи для хоста.
Чтобы убедиться, что наши роли работают должным образом, запустите файл ansible playbook, как показано.
$ sudo ansible-playbook /etc/ansible/stack.yml
Сценарий выполнит все роли, как показано.
Чтобы убедиться, что пакеты были установлены успешно, мы собираемся проверить их версии, как показано:
$ mongod --version $ apachectl -v $ git --version
Приведенный выше вывод подтверждает, что роли действительно выполняются успешно и пакет установлен. Идеально!
Подведение итогов:
Роли Ansible упрощают файлы playbook, особенно когда у вас есть несколько задач, которые нужно выполнить на нескольких хостах. Кроме того, вы можете повторно использовать роли для нескольких хостов без необходимости изменения файла playbook. Если вы нашли это руководство полезным, напишите нам и поделитесь им с друзьями.