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

Galaxy

Выгрузка роли из github в galaxy

ansible-galaxy role import --role-name MY_ROLE_NAME \
  --api-key SECRET \
  --branch BRANCH_IN_REPO \
  GITHUB_USERNAME GITHUB_PROJECT

Работа с Galaxy

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

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

Роли в 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 }