Как создавать Ansible-роли и использовать их в Playbook

Как создавать 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

Как создавать Ansible-роли и использовать их в Playbook

На экране выше команда создает каталог my-role . Этот ролевой каталог по умолчанию содержит следующие каталоги или папки.

  •  ‘defaults’ папка – Это содержит переменную по умолчанию , которые будут использоваться в роли.
  • files’ папка – Содержит файлы , которые могут быть развернуты с помощью роли.
  •  ‘handlers’ папка – хранит обработчики, которые могут использоваться этой ролью.
  •  ‘meta’ папка – содержит файлы, которые устанавливают зависимости ролей.
  • tasks’ папка – содержит файл YAML, в котором описаны задачи для самой роли. Обычно это файл main.yml.
  • templates’ папка – содержит файлы шаблонов, которые можно изменить и назначить для настраиваемого удаленного хоста.
  •  ‘tests’ папка – интегрирует тестирование с файлами Ansible playbook.
  •  ‘vars’ папка – содержит переменные, которые будут использоваться ролью. Вы можете определить их в файле playbook, но рекомендуется определять их в этом каталоге.

Чтобы просмотреть структуру каталогов ролей, выполните команду tree с указанием имени роли.

$ tree <role-name>

Как создавать Ansible-роли и использовать их в Playbook

Теперь, для демонстрации, мы собираемся создать три следующие роли:

  • prerequisites role – Устанавливает git
  • mongodb role – ядро базы данных MongoDB Установлено
  • apache role – Устанавливает веб — сервер Apache

Итак, используя тот же синтаксис, который мы использовали ранее, мы собираемся создать роли следующим образом:

$ sudo ansible-galaxy init prerequisites
$ sudo ansible-galaxy init mongodb
$ sudo ansible-galaxy init apache

Как создавать Ansible-роли и использовать их в Playbook

Следующим шагом является определение каждой созданной вами роли. Для этого вам необходимо отредактировать файл 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

Как создавать Ansible-роли и использовать их в Playbook

Для MongoDB у нас есть 2 задачи. Установка MongoDB и запуск демона Mongod.

- name: Install MongoDB
  apt:
     name: mongodb
     state: present
     update_cache: yes

- name: Start Mongod daemon
  shell: "mongod &"

Как создавать Ansible-роли и использовать их в Playbook

И, наконец, для веб-сервера Apache:

- name: install Apache web server
  apt:
     name=apache2
     state=present
     update_cache=yes

Как создавать Ansible-роли и использовать их в Playbook

Наконец, мы собираемся создать файл playbook с именем stack.yml и называть роли, как показано.

---
- hosts: all
  become: yes
  roles:
        -  prerequisites
        -  mongodb
        -  apache

Как создавать Ansible-роли и использовать их в Playbook

Как видите, файл playbook выглядит довольно просто по сравнению с определением каждой задачи для хоста.

Чтобы убедиться, что наши роли работают должным образом, запустите файл ansible playbook, как показано.

$ sudo ansible-playbook /etc/ansible/stack.yml

Сценарий выполнит все роли, как показано.

Как создавать Ansible-роли и использовать их в Playbook

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

$ mongod --version
$ apachectl -v
$ git --version

Как создавать Ansible-роли и использовать их в Playbook

Приведенный выше вывод подтверждает, что роли действительно выполняются успешно и пакет установлен. Идеально!

Подведение итогов:

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