Syntax highlighting of 7e528a1 ~( devops/ansible/roles)
# Ansible Roles [TOC] ## Полезные роли https://galaxy.ansible.com/ Service | Role names | Links ---|---|--- docker | geerlingguy.docker | [Galaxy](https://galaxy.ansible.com/geerlingguy/docker) nginx | geerlingguy.nginx | [Galaxy](https://galaxy.ansible.com/geerlingguy/nginx) nginx basic auth | geerlingguy.htpasswd | [Galaxy](https://galaxy.ansible.com/geerlingguy/htpasswd) ssh | willshersystems.sshd | [Galaxy](https://galaxy.ansible.com/willshersystems/sshd) systemd | cimon-io.systemd-service | [Galaxy](https://galaxy.ansible.com/cimon-io/systemd-service) ```bash 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* ```ini [defaults] roles_path = ~/ansible_roles ``` Подключение ролей к сценариям ```yml - 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` можно записать компактнее ```yml ... roles: - database - mezzanine ``` Определение зависимостей между ролями ```yml # roles/web/meta/main.yml dependencies: - { roles: ntp, ntp_server=ntp.ubuntu.com } # roles/django/meta/main.yml dependencies: - { roles: web } - { role: memcached } ``` Работа с Galaxy ```bash # список ролей ansible-galaxy list # Установка роли ansible-galaxy install -p ./roles bennojoy.ntp # Удаление роли ansible-galaxy remove bennojoy.ntp ```
