Syntax highlighting of devops/ansible/roles

= 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"]]||

{{{
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

}}}