Поиск по сайту:

Учебное пособие по ролям 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 у вас будут разные каталоги для организации ваших плейбуков.

Структура ролевого каталога

Давайте рассмотрим каждый каталог, чтобы понять его назначение.

  1. По умолчанию. В этом каталоге можно организовать переменные по умолчанию.
  2. Файлы — любые файлы, которые вы хотите скопировать на управляемые узлы и хранить в каталоге файлов.
  3. Обработчики – задачи Обработчики должны быть сгруппированы в каталоге обработчиков.
  4. Мета — хранит метаданные о роли. Он содержит метаданные, такие как автор, версия, платформа, теги, зависимости и т. д.
  5. Задачи. Задачи сборника сценариев следует создавать в каталоге задач. Это обязательный каталог для ролей.
  6. Шаблоны. Файлы, которые будут использоваться для создания шаблонов, должны храниться в каталоге шаблонов. Файлы должны использовать расширение jinga2 (.j2).
  7. Тесты. Тестовые примеры должны находиться в тестовом каталоге.
  8. Переменные – переменные, связанные с этой ролью. Имеет более высокий приоритет, если та же переменная используется в каталоге по умолчанию.

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

  1. Сначала роли будут найдены в каталоге roles/. Каталог ролей должен находиться в том же каталоге, что и ваша основная книга игр.
  2. В домашнем каталоге ~/.ansible/roles.
  3. В системных каталогах по умолчанию /usr/share/ansible/roles, /etc/ansible/roles.
  4. В каталоге проекта.

Если вы сохранили роли в другом месте, вы можете установить путь, используя "roles_path" в ansible.cfg< /стронг> файл.

#ansible.cfg

[defaults]
roles_path = <path-to-roles>:

Заключение

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

Статьи по данной тематике