Ansible Roles

Полезные роли

https://galaxy.ansible.com/

ServiceRole namesLinks
dockergeerlingguy.dockerGalaxy
nginxgeerlingguy.nginxGalaxy
nginx basic authgeerlingguy.htpasswdGalaxy
sshwillshersystems.sshdGalaxy
systemdcimon-io.systemd-serviceGalaxy
ansible-galaxy install -p ./roles geerlingguy.docker
# --- or
git submodule add git@github.com:geerlingguy/ansible-role-docker.git roles/geerlingguy.docker

Общие сведения

Роли в Ansible - это основной механизм деления сценария на отдельные файлы. Они упрощают написание сценариев и их повторное использование.

Например, файлы, связанные с ролью database, хранятся в каталоге roles/database со следующей структурой Каталог/файл | Описание ---|--- roles/database/defaults/main.yml | Переменные, которые могут переопределяться roles/database/files/ | Файлы, выгружаемые на хосты roles/database/handlers/main.yml | Обработчики roles/database/meta/main.yml | Информация о зависимостях данной роли roles/database/tasks/main.yml | Список задач без высокоуровневой операции roles/database/templates/ | Файлы шаблонов Jinja2 roles/database/vars/main.yml | Переменные, которые не должны переопределяться

По-умолчанию роли располагаются в каталоге /etc/ansible/roles или ./roles проекта. Изменение каталога ролей осуществляется через ansible.cfg

[defaults]
roles_path = ~/ansible_roles

Подключение ролей к сценариям

- name: deploy something on somewhere
  hosts: web
  vars_files:
    - secrets.yml
  roles:
    - role: database
      database_name: "{{ dbname }}"
      database_user: "{{ dbuser }}"

    - role: mezzanine
      live_hostname: 192.168.0.1

Если никакие переменные не переопределяются, то roles можно записать компактнее

  ...
  roles:
    - database
    - mezzanine

Определение зависимостей между ролями

# roles/web/meta/main.yml
dependencies:
  - { roles: ntp, ntp_server=ntp.ubuntu.com }

# roles/django/meta/main.yml
dependencies:
  - { roles: web }
  - { role: memcached }

Работа с Galaxy

# список ролей
ansible-galaxy list
# Установка роли
ansible-galaxy install -p ./roles bennojoy.ntp
# Удаление роли
ansible-galaxy remove bennojoy.ntp