Учебное пособие по ролям Ansible для начинающих
Как эффективно структурировать проект с использованием ролей Ansible
На нашем сайте мы рассмотрели все основные темы Ansible. Теперь в этой статье давайте узнаем, что такое роли Ansible и как использовать роли Ansible для создания структурированного проекта и их распространения. Далее мы перейдем к обсуждению преимуществ использования ansible ролей по сравнению со стандартными сборниками сценариев. Наконец, мы увидим, как создавать роли Ansible и различные методы импорта ролей в книгу сценариев.
Что такое Ansible-роль?
Роли Ansible предлагают структуру каталогов, позволяющую разбивать сложные сборники сценариев на небольшие и управляемые фрагменты. Основное преимущество использования ansible ролей приведено ниже:
- Вы можете достичь высокого уровня модульности.
- Легко перераспределяйте роли, используя коллекции ansible.
- Легко отлаживать любые ошибки.
- Тест-ориентированный подход.
В следующих разделах я покажу вам, как создать простую роль ansible и различные способы использования ролей в сборнике сценариев.
Создайте Ansible-роль
Используйте команду ansible-galaxy
, чтобы инициировать роль. Здесь я назвал свою роль sample-role.
ansible-galaxy init sample-role
- Role sample-role was created successfully
В каталоге sample-role
у вас будут разные каталоги для организации ваших плейбуков.
Структура ролевого каталога
Давайте рассмотрим каждый каталог, чтобы понять его назначение.
- По умолчанию. В этом каталоге можно организовать переменные по умолчанию.
- Файлы — любые файлы, которые вы хотите скопировать на управляемые узлы и хранить в каталоге файлов.
- Обработчики – задачи Обработчики должны быть сгруппированы в каталоге обработчиков.
- Мета — хранит метаданные о роли. Он содержит метаданные, такие как автор, версия, платформа, теги, зависимости и т. д.
- Задачи. Задачи сборника сценариев следует создавать в каталоге задач. Это обязательный каталог для ролей.
- Шаблоны. Файлы, которые будут использоваться для создания шаблонов, должны храниться в каталоге шаблонов. Файлы должны использовать расширение jinga2 (.j2).
- Тесты. Тестовые примеры должны находиться в тестовом каталоге.
- Переменные – переменные, связанные с этой ролью. Имеет более высокий приоритет, если та же переменная используется в каталоге по умолчанию.
Если вы посмотрите на изображение выше, то увидите, что в некоторых каталогах есть общий файл main.yml
. Не следует пытаться переименовать этот файл, поскольку ansible будет искать связанный объект в файле main.yml
.
В рамках вашей роли обязательным является только каталог задач, а все остальные каталоги можно пропустить.
Создайте свою первую роль Ansible
Я собираюсь создать проект, который установит пару инструментов для моего рабочего стола Ubuntu. Сначала я создам файл ansible.cfg
и файл инвентаря.
$ vim ansible.cfg
[defaults]
[defaults]
inventory = hosts
host_key_checking = False
nocows = 1
actions_warnings = False
interpreter_python = auto_legacy_silent
$ vim hosts
localhost ansible_connection=local
Создал сборник пьес с единственной задачей по установке инструментов терминала.
---
- name: Role testing
hosts: localhost
gather_facts: false
become: true
tasks:
# Tools for terminal
- name: TERMINAL - Kitty, Tmux, Fish
ansible.builtin.apt:
pkg:
- kitty
- tmux
- fish
state: present
Ниже приведен результат выполнения вышеуказанной задачи. Это стандартный способ создания плейбука в ansible.
Установите инструменты терминала
Теперь создадим роль и организуем задачу внутри роли. Я не использую команду ansible-galaxy
для инициализации роли, вместо этого я вручную создаю каталог задач, который является единственным каталогом, необходимым для моей роли.
Здесь моя роль называется "tools
", и создается каталог задач вместе с файлом main.yml
.
mkdir -p roles/tools/tasks/
touch roles/tools/tasks/main.yml
tree roles/
roles/
`-- tools
`-- tasks
`-- main.yml
2 directories, 1 file
Теперь переместите задачу в файл tasks/main.yml
.
Содержимое файла main.yml
В основной книге вы должны указать ansible использовать роли для выполнения задачи. Есть несколько способов добиться этого.
1. Роли на игровом уровне
Вы можете использовать ключевое слово roles
и указать имя роли в качестве входных данных.
---
- name: Role testing
hosts: localhost
gather_facts: false
become: true
roles:
- tools
Ansible будет рассматривать роли, определенные на уровне воспроизведения, как статический импорт и будет анализироваться при анализе книги воспроизведения.
Вы можете запустить playbook с подробным описанием, чтобы увидеть, откуда автоматически выбирается задача.
ansible-playbook -K playbook.yml -vvvv
Запустить Playbook с помощью Verbose
В разделе ролей можно добавить несколько правил.
roles:
- roleA
- roleB
- roleC
Вы также можете применить другие директивы ansible, такие как vars
и tags
. Например, если вы примените теги на уровне роли, они будут унаследованы всеми задачами в этой роли.
roles:
- role: tools
tags: terminal
2. Импорт ролей на уровне задач с помощью импорта и включения
Вы можете импортировать роли в книгу воспроизведения статически и динамически с помощью директив import_roles
и include_roles
.
И import_role
, и include_role
имеют схожий синтаксис. Основное отличие заключается в том, что директивы import*
обрабатываются во время анализа плейбука, а директива include*
обрабатывается только в порядке они определяются и выполняют задачу динамически.
tasks:
- name: Import tools tasks
import_role:
name: tools
tasks:
- name: Include tools tasks
include_role:
name: tools
Теперь у вас должно быть четкое представление о том, как структурировать роль. Когда вы создаете сборники сценариев, включающие переменные, обработчики и файлы, вам необходимо создать соответствующий каталог и сгруппировать задачи.
Расположение роли Ansible
В Ansible есть способ найти местоположение роли и выполнить задачи. Если ansible не сможет найти роль, будет выдана следующая ошибка.
ERROR! the role 'tools' was not found in /ansible/dockerlab/playbooks/roles_testing/project1/roles:/home/ansuser/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/ansible/dockerlab/playbooks/roles_testing/project1
Взгляните на приведенное выше сообщение об ошибке. Он показывает пару каталогов, в которых ansible будет искать роль.
Первый и последний путь к каталогу автоматически добавляются ansible на основе каталога, из которого вы запустили книгу воспроизведения.
- Сначала роли будут найдены в каталоге
roles/
. Каталог ролей должен находиться в том же каталоге, что и ваша основная книга игр. - В домашнем каталоге
~/.ansible/roles
. - В системных каталогах по умолчанию
/usr/share/ansible/roles
,/etc/ansible/roles
. - В каталоге проекта.
Если вы сохранили роли в другом месте, вы можете установить путь, используя "roles_path
" в ansible.cfg
< /стронг> файл.
#ansible.cfg
[defaults]
roles_path = <path-to-roles>:
Заключение
В этой статье мы рассмотрели что такое роли Ansible и преимущества использования ролей Ansible по сравнению со стандартными сборниками сценариев. Затем мы обсудили, как создавать роли Ansible и различные способы импортировать роли Ansible в книгу сценариев. Наконец, мы увидели, как ansible находит роли с помощью roles_path
и как добавить собственный путь к директиве roles_path
.