= Ansible Roles =
<<TableOfContents()>>
== Полезные ссылки ==
[[https://galaxy.ansible.com/]]
== Полезные роли ==
||Service||Role names||Links||
=====
||docker||geerlingguy.docker||[[https://galaxy.ansible.com/geerlingguy/docker|Galaxy|class=" moin-https"]]||
||nginx||geerlingguy.nginx||[[https://galaxy.ansible.com/geerlingguy/nginx|Galaxy|class=" moin-https"]]||
||nginx basic auth||geerlingguy.htpasswd||[[https://galaxy.ansible.com/geerlingguy/htpasswd|Galaxy|class=" moin-https"]]||
||ssh||willshersystems.sshd||[[https://galaxy.ansible.com/willshersystems/sshd|Galaxy|class=" moin-https"]]||
||systemd||cimon-io.systemd-service||[[https://galaxy.ansible.com/cimon-io/systemd-service|Galaxy|class=" moin-https"]]||
{{{#!highlight bash
ansible-galaxy install -p ./roles geerlingguy.docker
# --- or
git submodule add git@github.com:geerlingguy/ansible-role-docker.git roles/geerlingguy.docker
}}}
== Galaxy ==
Работа с galaxy
{{{#!highlight bash
# список ролей
ansible-galaxy list
# Установка роли
ansible-galaxy install -p ./roles bennojoy.ntp
# Удаление роли
ansible-galaxy remove bennojoy.ntp
}}}
Выгрузка роли из github в galaxy
{{{#!highlight bash
ansible-galaxy role import --role-name MY_ROLE_NAME \
  --api-key SECRET \
  --branch BRANCH_IN_REPO \
  GITHUB_USERNAME GITHUB_PROJECT
}}}
== Общие сведения ==
''Роли'' в 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''
{{{#!highlight ini
[defaults]
roles_path = ~/ansible_roles
}}}
Подключение ролей к сценариям
{{{#!highlight yaml
- 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` можно записать компактнее
{{{#!highlight yaml
  ...
  roles:
    - database
    - mezzanine
}}}
Определение зависимостей между ролями
{{{#!highlight yaml
# roles/web/meta/main.yml
dependencies:
  - { roles: ntp, ntp_server=ntp.ubuntu.com }
# roles/django/meta/main.yml
dependencies:
  - { roles: web }
  - { role: memcached }
}}}