Skip to main content

Роли

Роли используются для конфигурации конкретных приложений. По умолчанию директория /etc/ansible/roles

Настраивается в cfg файле:

[defaults]
roles_path = ./roles

Также в переменной ANSIBLE_ROLES_PATH

Структура роли и добавление в playbook

  1. Создается папка roles, внутри папки с названиями ролей, внутри каждой папки - defaults files handlers meta templates tasks vars
  2. в playbook добавляется 
       roles:
        - имя

Назначения папок

Папка Назначение
defaults позволяет устанавливатьУстанавливает переменные по умолчанию для включенных илиролей. зависимыхОбычно ролей.defaults/main.yml 
---
# Used only for Debian/Ubuntu installation, as the -t option for apt.
nginx_default_release: ""

# Used only for Redhat installation, enables source Nginx repo.
nginx_yum_repo_enabled: true

# Use the official Nginx PPA for Ubuntu, and the version to use if so.
nginx_ppa_use: false
nginx_ppa_version: stable
files содержит статические файлы и файлы сценариев, которые могут быть скопированы на удалённый сервер или выполнены на нём.
handlers всеОбработчики, обработчики,выполняемые которые ранее были в вашемсамом плейбуке, теперь могут быть добавлены в каталог.конце
meta для метаданных роли, которые используются для управления зависимостями. Например, вы можете определить список ролей, которые должны быть применены до вызова текущей роли.
templates дляШаблоны шаблонов,генерации которые генерируют файлыфайлов на удалённых хостах. Шаблоны jinja2. 
cat templates/nginx.conf.j2
user  {{ nginx_user }};

error_log  {{ nginx_error_log }};
pid        {{ nginx_pidfile }};

{% block worker %}
worker_processes  {{ nginx_worker_processes }};
{% endblock %}

{% if nginx_extra_conf_options %}
{{ nginx_extra_conf_options }}
{% endif %}

{% block events %}
events {
    worker_connections  {{ nginx_worker_connections }};
    multi_accept {{ nginx_multi_accept }};
}
{% endblock %}

http {
    {% block http_begin %}{% endblock %}
tasks содержит один

Содержит или несколько файловфайлы с задачами, которые определяются в разделе tasks обычного плейбука Ansible. Сначала просматривается файл tasks/main.yml В нем указывается условия импорта других файлов

---
# Variable setup.
- name: Include OS-specific variables.
  include_vars: "{{ ansible_os_family }}.yml"

- name: Define nginx_user.
  set_fact:
    nginx_user: "{{ __nginx_user }}"
  when: nginx_user is not defined

# Setup/install tasks.
- include_tasks: setup-RedHat.yml
  when: ansible_os_family == 'RedHat'

- include_tasks: setup-Ubuntu.yml
  when: ansible_distribution == 'Ubuntu'

- include_tasks: setup-Debian.yml
  when: ansible_os_family == 'Debian'

# Vhost configuration.
- import_tasks: vhosts.yml

# Nginx setup.
- name: Copy nginx configuration in place.
  template:
    src: "{{ nginx_conf_template }}"
    dest: "{{ nginx_conf_file_path }}"
    owner: root
    group: "{{ root_group }}"
    mode: 0644
  notify:
    - reload nginx

- name: Ensure nginx service is running as configured.
  service:
    name: nginx
    state: "{{ nginx_service_state }}"
    enabled: "{{ nginx_service_enabled }}"

Пути указываются относительно директории tasks

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

vars переменные для роли могут быть указаны в файлах внутри каталога, а затем ссылаться на них в другом месте роли.

Ссылки:

Пример преобразования одного файла в роль

Хранилище ролей

Есть сайт с ролями почти для всего. Сайт с ролями ansible Можно найти нужную роль на сайте, затем установить при помощи 

ansible-galaxy install current_role_name -p .

Создание роли:

ansible-galaxy init new_role_name

Пример создания новой роли

Пусть будет задача в установке docker. Реализуем из инструкции по Docker: общая информация и установка

Инициализируем новую роль 

ansible-galaxy init just_new_role

Структура директорий создана. Проанализируем инструкцию.

  • Написана для 3 вариаций ОС: Debian, Ubuntu, Alt.
  • Последовательность установки: 
    • Создание пользователя
    • Добавление сертификатов
    • Непосредственно установка пакетов
    • Дополнительные удобства

В константы будем постепенно добавлять нужные. Итоговый defaults/main.yml : 

---
# defaults file for just_new_role
docker_user: webadmin
packages_certificates:
  - ca-certificates
  - curl
  - gnupg
  - lsb-release
packages_docker_debian:
  - docker-ce
  - docker-ce-cli
  - containerd.io
  - docker-compose-plugin
packages_docker_alt:
  - docker-engine
  - docker-compose-v2

Начнем с установки sudo и добавления пользователя в группы, то есть реализуем блок задач

apt-get install sudo
sudo apt-get update
usermod -aG sudo docker_user