Syntax highlighting of
7e528a1 ~( 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"]]||
{{{#!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 }
}}}