Ansible Roles
Полезные роли
https://galaxy.ansible.com/
Service | Role names | Links |
---|---|---|
docker | geerlingguy.docker | Galaxy |
nginx | geerlingguy.nginx | Galaxy |
nginx basic auth | geerlingguy.htpasswd | Galaxy |
ssh | willshersystems.sshd | Galaxy |
systemd | cimon-io.systemd-service | Galaxy |
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